创建一个时区感知日期时间对象 returns 一个错误的时区
creating a timezone aware datetime object returns a wrong timezone
当我为 'US/Eastern'
创建一个时区感知日期时间对象并将其打印出来时,它显示我的时区好像是 -4:56
而不是 -4:00
>>> obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=pytz.timezone('US/Eastern'))
>>> print(obj)
2020-07-01 09:30:00-04:56
而不是预期的:
2020-07-01 09:30:00-04:00
我是不是做错了什么?
docs中提到构造日期时间对象不能这样工作。
你应该这样做:
from datetime import datetime
from pytz import timezone
eastern = timezone('US/Eastern')
obj = eastern.localize(datetime(2020, 7, 1, 9, 30))
>>> obj
datetime.datetime(2020, 7, 1, 9, 30, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
>>> print(obj)
2020-07-01 09:30:00-04:00
看看 dateutil
- 您可以使用您最初打算的方法安全地构建可识别 tz 的日期时间对象:
import datetime
import dateutil
obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=dateutil.tz.gettz('US/Eastern'))
print(obj)
# 2020-07-01 09:30:00-04:00
在 Python 3.9 中,将有 zoneinfo
作为该任务的标准库的一部分。
当我为 'US/Eastern'
创建一个时区感知日期时间对象并将其打印出来时,它显示我的时区好像是 -4:56
而不是 -4:00
>>> obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=pytz.timezone('US/Eastern'))
>>> print(obj)
2020-07-01 09:30:00-04:56
而不是预期的:
2020-07-01 09:30:00-04:00
我是不是做错了什么?
docs中提到构造日期时间对象不能这样工作。
你应该这样做:
from datetime import datetime
from pytz import timezone
eastern = timezone('US/Eastern')
obj = eastern.localize(datetime(2020, 7, 1, 9, 30))
>>> obj
datetime.datetime(2020, 7, 1, 9, 30, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
>>> print(obj)
2020-07-01 09:30:00-04:00
看看 dateutil
- 您可以使用您最初打算的方法安全地构建可识别 tz 的日期时间对象:
import datetime
import dateutil
obj = datetime.datetime(2020, 7, 1, 9, 30, tzinfo=dateutil.tz.gettz('US/Eastern'))
print(obj)
# 2020-07-01 09:30:00-04:00
在 Python 3.9 中,将有 zoneinfo
作为该任务的标准库的一部分。