python:使用Arrow从带有时区的字符串中解析日期和时间

Parse date and time from string with time zone using Arrow

我有

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

我如何用箭头解析它,使我得到一个时区为tz的箭头对象?以下默认为UTC时间。

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

我知道.to函数,但它转换时区,但不允许我更改时区。


试试这个:

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


我还没有资格添加评论,只是想用时区str表达式来分享答案的一个更简单的版本。

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

或者只是当地时区:

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

或指定ISO-8601样式:

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


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

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

但是,到目前为止(0.12.1版),有一个缺点,那就是它不适用于基于字符串的日期解析。幸运的是,这个问题已经解决了,所以Arrow的下一个版本将集成这个问题。