如何解决如何强制pytz使用当前的标准时区?
请考虑以下内容:
from datetime import datetime
import pytz
new_years_in_new_york = datetime(
year=2020,month=1,day=1,hour=0,minute=0,tzinfo = pytz.timezone('US/Eastern'))
我现在有一个日期时间对象,代表纽约的1月1日午夜。奇怪的是,如果我使用pytz将其转换为UTC,我将得到几分钟的奇异日期时间:
new_years_in_new_york.astimezone(pytz.utc)
# datetime.datetime(2020,1,4,56,tzinfo=<UTC>)
请注意,纽约时间午夜(pytz)在世界标准时间为 4:56 。在堆栈溢出的其他地方,我了解到这是因为pytz uses your /usr/share/zoneinfo
数据在标准化之前使用了本地平均时间来说明时区。可以在这里显示:
pytz.timezone('US/Eastern')
# <DstTzInfo 'US/Eastern' LMT-1 day,19:04:00 STD>
看到LMK-1 day,19:04:00 STD
吗?那是本地平均时间偏移,不是我想要的偏移,这是夏令时期间的美国/东部 not 。
有没有一种方法可以强制pytz根据当前日期使用当前标准的偏移量集?在新年2020年,它应该只是UTC-5。如果我提供的日期是夏令时,则需要UTC-4。我对pytz为什么在2020年之前使用基于LMT的偏移量感到困惑。
解决方法
>>> new_years_in_new_york
datetime.datetime(2020,1,tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day,19:04:00 STD>)
请注意该日期时间的奇数偏移量。您没有正确创建此日期时间。
该库仅支持构建本地化时间的两种方式。的 首先是使用pytz库提供的
localize()
方法。 这用于本地化没有时区的原始日期时间(datetime
信息):>>> loc_dt = eastern.localize(datetime(2002,10,27,6,0)) >>> print(loc_dt.strftime(fmt)) 2002-10-27 06:00:00 EST-0500
构建本地化时间的第二种方法是将 使用标准
astimezone()
方法的现有本地时间:>>> ams_dt = loc_dt.astimezone(amsterdam) >>> ams_dt.strftime(fmt) '2002-10-27 12:00:00 CET+0100'
不幸的是,使用标准
tzinfo
的{{1}}参数 pytz的构造函数在许多时区都“不起作用”。datetime
http://pytz.sourceforge.net/#localized-times-and-date-arithmetic
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。