Разобрать дату и время из строки с часовым поясом с помощью стрелки

Я имею

import arrow
s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'

Как я могу разобрать это с Arrow так, чтобы я получил объект Arrow с часовым поясом tz? Следующее по умолчанию время UTC.

In [30]: arrow.get(s, 'YYYY/M/D HH:mm:ss')
Out[30]: <Arrow [2015-12-01T19:00:00+00:00]>

Я знаю .to функция, но это преобразует часовой пояс и, но не позволяет мне перейти на часовой пояс.

3 ответа

Решение

Попробуй это:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=dateutil.tz.gettz(tz))

Я еще не готов добавить комментарий и просто хотел бы поделиться немного более простой версией ответа с выражением str в часовом поясе.

s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'
arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=tz)

или просто местный часовой пояс:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='local')

или указанный стиль ISO-8601:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='+08:00')

Это работает для меня с 0.10.0:

import arrow
s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'

arrow.get(s, 'YYYY/M/D HH:mm:ss', tzinfo=tz)
# <Arrow [2015-12-01T19:00:00+08:00]>

Тем не мение, arrow.get('2018-01-29 14:46', tzinfo='US/Central') (т.е. без строки формата) игнорирует tzinfo параметр.

В соответствии с текущей документацией вы также можете указать часовой пояс по умолчанию для arrow.get()Например:

s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'
arrow.get(s, tzinfo=tz)

Однако на данный момент (версия 0.12.1) есть недостаток, который не работает для парсинга дат на основе строк. К счастью, это было исправлено, поэтому в следующем выпуске Arrow будет это исправление.

Другие вопросы по тегам