Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pytz美国/东部来回转换时间戳_Python_Python 2.7_Datetime_Timezone_Pytz - Fatal编程技术网

Python pytz美国/东部来回转换时间戳

Python pytz美国/东部来回转换时间戳,python,python-2.7,datetime,timezone,pytz,Python,Python 2.7,Datetime,Timezone,Pytz,发件人: 因此,纽约时间基本上是东部标准时间或东部标准时间,这取决于我们目前在一年中的哪个时段,这是因为白天节省时间 在pytz中使用US/Eastern时,它是指ET、EST还是EDT?。它是否考虑了东部标准时间/东部标准时间的变化? 我使用此代码获取东部时间中给定日期的开始和结束时间戳: 导入日期时间 进口皮茨 session=datetime.datetime.strtime('26/02/2019','%d/%m/%Y') 交易所=pytz.时区(“美国/东部”) 会话本地化=交换本地化

发件人:

因此,纽约时间基本上是东部标准时间或东部标准时间,这取决于我们目前在一年中的哪个时段,这是因为白天节省时间

在pytz中使用US/Eastern时,它是指ET、EST还是EDT?。它是否考虑了东部标准时间/东部标准时间的变化?

我使用此代码获取东部时间中给定日期的开始和结束时间戳:

导入日期时间
进口皮茨
session=datetime.datetime.strtime('26/02/2019','%d/%m/%Y')
交易所=pytz.时区(“美国/东部”)
会话本地化=交换本地化(会话)
_period1=int((session\u localized-datetime.datetime(1970,1,1,tzinfo=exchange\u tz)).total\u seconds())
_period2=int((session\u localized-datetime.datetime(1970,1,1,tzinfo=exchange\u tz)).total\u seconds())+24*60*60
>>>_周期1
1551139200
>>>_周期2
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
。我做错了什么

我还读到,在进行算术覆盖时应使用
normalize()
函数,但我不确定这是否适用于这种情况

在pytz中使用
US/Eastern
时,它是指ET、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

,感谢您的澄清。但是,我使用了
localize
而不是
tzinfo=exchange\u tz
,我得到了相同的时间戳,但在尝试将该时间戳转换回US/EasternUpdate我的答案时仍然存在相同的问题。它有两个步骤:首先让datetime“意识到”它是UTC,然后将其转换为东部时间。否则,您就错误地断言它已经在东部时间而不是UTC时间。(Unix时间戳总是以UTC表示)。(很抱歉,如果我没有直接回答您的问题-您的第一个代码块有一些难以理解的地方,并且似乎与第二个代码块无关。)第一个代码块生成时间戳,这些时间戳稍后用于调用Web服务。然后,Web服务使用由两个时间戳定义的范围内的数据进行响应。你说所有的时间戳都是UTC(这是一个强有力的主张),这让我再次仔细检查了一切(我调用的API没有文档记录)。数字时间戳,如
1551139200
总是UTC,或者无论如何都应该是UTC,除非有人人为(错误地)调整它们。此外,ISO8601格式字符串末尾的
Z
表示UTC。如果您只是有一些日期/时间值,而它不是这两种格式中的任何一种,那么您必须以其他方式了解它的时区。
    _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'