【发布时间】:2012-08-29 01:17:31
【问题描述】:
我收到一个固定时区的日期。我需要将其转换为本地机器的时区,但我不知道那是什么。如何使用 pytz (not dateutil) 做到这一点?我发现了很多使用 dateutil 的解决方案,例如this answer,但是我在pytz中找不到类似的功能。
【问题讨论】:
-
很遗憾,您在
pytz中找不到类似功能的原因是它不存在。pytz要求您命名时区,以便它可以查找。
我收到一个固定时区的日期。我需要将其转换为本地机器的时区,但我不知道那是什么。如何使用 pytz (not dateutil) 做到这一点?我发现了很多使用 dateutil 的解决方案,例如this answer,但是我在pytz中找不到类似的功能。
【问题讨论】:
pytz 中找不到类似功能的原因是它不存在。 pytz 要求您命名时区,以便它可以查找。
您可以通过 (UTC) Unix 时间戳进行转换:
foreign_naive = datetime.datetime(2012, 3, 11, 6, 0, 0)
foreign_timezone = 'US/Eastern'
foreign_dt = pytz.timezone(foreign_timezone).localize(foreign_naive)
timestamp = time.mktime(foreign_dt).astimezone(pytz.utc).timetuple()
local_dt = datetime.datetime.fromtimestamp(timestamp)
这使用来自Python Create unix timestamp five minutes in the future的解决方案。
请注意,这不会告诉您当地时区是什么,尽管您可以使用以下方法找出其与 UTC 的偏移量:
(local_dt - datetime.datetime.utcfromtimestamp(timestamp)).seconds
【讨论】:
datetime.datetime.fromtimestamp 和datetime.datetime.utcfromtimestamp 可以得到timestamp 的偏移量。
datetime.datetime.fromtimestamp。