Generalized Time Zone in New York
ET Eastern Time UTC -5:00 / -4:00 Wed, 11:42:33
Time Zone Currently Being Used in New York
UTC -5 EST Eastern Standard Time New York Wed, 11:42:33
Time Zone Not Currently Being Observed in New York
UTC -4 EDT Eastern Daylight Time 10 Mar 2019
因此,由于夏令时的节省,基本上纽约时间是美国东部时间(EST)或美国东部时间(EDT),具体取决于我们当前处于一年中的哪个时段。
在pytz中使用US / Eastern时,它是指ET,EST还是EDT?是否考虑到EST / EDT时间的变化?
我正在使用此代码获取东部时间中给定日期的开始和结束的时间戳记:
import datetime
import pytz
session = datetime.datetime.strptime('26/02/2019', '%d/%m/%Y')
exchange_tz = pytz.timezone('US/Eastern')
session_localized = exchange_tz.localize(session)
_period1 = int((session_localized - datetime.datetime(1970, 1, 1, tzinfo=exchange_tz)).total_seconds())
_period2 = int((session_localized - datetime.datetime(1970, 1, 1, tzinfo=exchange_tz)).total_seconds()) + 24*60*60
>>> _period1
1551139200
>>> _period2
1551225600
我不是100%确信这些时间戳记已正确生成。因为当我尝试将它们转换回本地化的日期时间时,会得到1个小时的时差:
_exchange_tz = pytz.timezone('US/Eastern')
_exchange_ts = _exchange_tz.localize( datetime.datetime.fromtimestamp(1551139200) )
>>> str(_exchange_ts)
'2019-02-26 01:00:00-05:00'
据我所知,它将为2019-02-26 00:00:00
。我在做什么错了?
我还读过pytz documentation,说在进行算术覆盖时应使用normalize()
函数,但是我不确定这是否适用于这种情况。
答案 0 :(得分:1)
在pytz中使用
US/Eastern
时,它是指ET,EST还是EDT?是否考虑到EST / EDT时间的变化?
这些是IANA(又名TZDB,Olson等)时区标识符。 US/Eastern
是指向America/New_York
的链接/别名。两者都正确地模拟了美国东部时区的历史,包括EST或EDT,这取决于它们何时适用。
对于您的示例,时间戳1551139200
等于2019-02-26T00:00:00Z
(UTC)。在美国东部时间,该时间为2019-02-25T19:00:00-05:00
。那应该是你得到的结果。您首先需要将输入值本地化为UTC(或者对于UTC,可以安全地分配tzinfo=pytz.utc
)。然后使用astimezone
函数转换为US/Eastern
。