【问题标题】:Using pytz to convert from a known timezone to local使用 pytz 从已知时区转换为本地时区
【发布时间】:2012-08-29 01:17:31
【问题描述】:

我收到一个固定时区的日期。我需要将其转换为本地机器的时区,但我不知道那是什么。如何使用 pytz (not dateutil) 做到这一点?我发现了很多使用 dateutil 的解决方案,例如this answer,但是我在pytz中找不到类似的功能。

【问题讨论】:

  • 很遗憾,您在pytz 中找不到类似功能的原因是它不存在。 pytz 要求您命名时区,以便它可以查找。

标签: python pytz


【解决方案1】:

您可以通过 (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

【讨论】:

  • 知道当前与 UTC 的偏移量在任何使用夏令时的时区都没有用。
  • @MarkRansom 这不是问题;比较datetime.datetime.fromtimestampdatetime.datetime.utcfromtimestamp 可以得到timestamp 的偏移量。
  • 原始问题指出本地机器的时区未知。
  • @MarkRansom 对,你不需要知道本地机器的时区就可以使用datetime.datetime.fromtimestamp
猜你喜欢
  • 2022-01-11
  • 2014-10-05
  • 2018-01-03
  • 1970-01-01
  • 2011-09-16
  • 2011-11-19
  • 2016-02-05
  • 2019-06-19
  • 2021-02-14
相关资源
最近更新 更多