如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?

Posted

技术标签:

【中文标题】如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?【英文标题】:How can you get the unix epoch timestamp in seconds from a given date and time in a given city? 【发布时间】:2021-02-03 16:03:51 【问题描述】:

我正在尝试获取以下纽约日期和时间的相应 Epoch Unix 时间戳(以秒为单位):

2020-09-25 09:30 New York Time.

根据https://www.epochconverter.com/timezones?q=1601040600&tz=America%2FNew_York对应:

Conversion results (1601040600)
1601040600 converts to Friday September 25, 2020 09:30:00 (am) in time zone America/New York (EDT)

这是我尝试过的:

import datetime
import pytz
​
et = pytz.timezone('America/New_York')
​
mydt = datetime.datetime(2020,9,25,9,30,0,0,et)

​myepoch = int(mydt.timestamp())
​
print('2020-09-25 09:30 ET Epoch: ', myepoch)
​    ​
>>> OUTPUT
2020-09-25 09:30 ET Epoch:  1601043960
​

所以它给出了1601043960 而不是1601040600。为什么以及应该做些什么来获得正确的价值?

请注意,该解决方案适用于任何日期,因此它必须自动处理 EST/EDT 夏令时。

【问题讨论】:

如果您可以访问地理数据库(例如 OSM/Nominatim),您甚至可以使用 geopy 查找城市坐标,使用 timezonefinder 获取该坐标的时区和然后获取当地时间。 【参考方案1】:

似乎解决方案是这样的:

import datetime
import pytz
​
et = pytz.timezone('America/New_York')
​
mydt = et.localize(datetime.datetime(2020,9,25,9,30,0,0))

​myepoch = int(mydt.timestamp())
​
print('2020-09-25 09:30 ET Epoch: ', myepoch)
​    ​
>>> OUTPUT
2020-09-25 09:30 ET Epoch:  1601040600

【讨论】:

见deprecation of pytz和Display the time in a different time zone 哦,请查看the fastest footgun in the west,了解为什么如果您不进行本地化(LMT ...)会得到无效的时间戳;-)

以上是关于如何从给定城市的给定日期和时间获取 unix 纪元时间戳(以秒为单位)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中将给定的日期和时间转换为纪元时间?

如何从 postgres 获取时间戳作为 Unix 纪元?

PostgreSQL:如何从 Unix 纪元转换为日期?

日期时间和熊猫之间的 Unix 纪元值不匹配

通过迭代从 UNIX 时间计算日期 - 逻辑缺陷?

从 CalendarView 获取自 UNIX 纪元以来的 Millis 时间