使用 pytz 和 datetime 在 python 中获取 27/02/2019 00:00 US/Eastern 的时间戳
Posted
技术标签:
【中文标题】使用 pytz 和 datetime 在 python 中获取 27/02/2019 00:00 US/Eastern 的时间戳【英文标题】:Get timestamp for 27/02/2019 00:00 US/Eastern in python using pytz and datetime 【发布时间】:2019-07-21 14:08:12 【问题描述】:我有以下字符串:
27/02/2019
在程序中知道这些日期对应于纽约时区,我想得到对应的时间戳:
27/02/2019 00:00 US/Eastern
我试过了:
import datetime
import pytz
exchange_tz = pytz.timezone('US/Eastern')
_period1 = datetime.datetime(2019,2,27)
_period1_localized = exchange_tz.localize(_period1)
_period1_ts = int((_period1_localized - datetime.datetime(1970, 1, 1, tzinfo=exchange_tz)).total_seconds())
>>> _period1_ts
1551225600
但这给出了对应的时间戳:
27/02/2019 00:00 UTC
我使用此服务检查了1551225600
时间戳对应于27/02/2019 00:00 UTC
而不是27/02/2019 00:00 US/Eastern
:
https://www.epochconverter.com/
我做错了什么?
【问题讨论】:
如何将时间戳转换为显示的日期?我们需要一个minimal reproducible example。 我得到 1551225600,据我所知,它对应于 27/02/2019 00:00 UTC 时间,而不是 27/02/2019 00:00 美国/东部时间。这是最小的、完整的和可验证的。 我在该网站上没有看到可以指定“人类日期”应转换为的特定时区的任何地方 - 所以我不同意这是用于验证的权威测试. 时间戳是 UTC - 据我所知 - 如果您输入由网站中的代码生成的时间戳,您将获得问题中所述的带有时区的时间戳。无论如何,我自己发现了这个问题。我确信有更多“权威”的方法可以将时间戳转换为基于时区的人类可读日期。随意贡献一个。 【参考方案1】:以防万一它对其他人有所帮助,我发现错误位于此处:
_period1_ts = int((_period1_localized - datetime.datetime(1970, 1, 1, tzinfo=exchange_tz)).total_seconds())
它应使用 UTC 时区作为 EPOCH 时间:
_period1_ts = int((_period1_localized - datetime.datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds())
通过这样做你得到1551243600
作为时间戳,它对应于Wednesday, 27 February 2019 05:00:00 UTC
,实际上是27/02/2019 00:00 US/Eastern time
上面带有这个修正的代码可用于从本地化的日期时间获取时间戳。
【讨论】:
以上是关于使用 pytz 和 datetime 在 python 中获取 27/02/2019 00:00 US/Eastern 的时间戳的主要内容,如果未能解决你的问题,请参考以下文章
pytz 和 datetime 奇怪的行为 - 可能的错误?
何时使用 datetime.utcnow() 或 datetime.now(tz=pytz.utc).replace(tzinfo=None)