使用箭头从带有时区的字符串中解析日期和时间

时间:2015-01-22 11:06:07

标签: python datetime timezone arrow-python

我有

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

如何用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功能,但会转换时区,但不允许我更改为时区。

4 个答案:

答案 0 :(得分:12)

试试这个:

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

答案 1 :(得分:9)

我还没有资格添加评论,只想与timezone 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')

答案 2 :(得分:0)

根据当前documentation,您还可以为arrow.get()提供默认时区,例如:

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

但是,截至目前(版本0.12.1),存在一个缺点,即对于基于字符串的日期解析不起作用。幸运的是,这个has been fixed,所以Arrow的下一个版本将集成此修复程序。

答案 3 :(得分:0)

从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参数。