【问题标题】:How to get current offset of any timezone in Python如何在 Python 中获取任何时区的当前偏移量
【发布时间】:2018-11-29 14:59:13
【问题描述】:

我需要获取 Python 中任何时区的当前偏移量。目前我正在使用pytz 库,并且我正在使用以下代码获取偏移量:

import datetime
import pytz
timezone = 'America/Punta_Arenas'
datetime.datetime.now(pytz.timezone(timezone)).utcoffset().total_seconds()/60/60
//prints -3
timezone = 'America/Santiago'
datetime.datetime.now(pytz.timezone(timezone)).utcoffset().total_seconds()/60/60
//prints -4

以“美国/圣地亚哥”为例:今年(2018 年)将 DST 定为 5 月 13 日,而 2015 年全年观察 DST,2014 年定为 4 月 27 日。因此,根据日期和年份,偏移量是“-3”或“-4”。

我假设之前的代码不了解每个国家/地区关于 DST 的政治决定,并且可能会根据固定的 DST 日期或类似的东西为您提供偏移量。既然我不知道datetimepytz的具体细节,我宁愿问,这个假设对吗?

如果它不知道,我怎样才能获得任何时区的实际当前偏移量?

【问题讨论】:

  • @StephenRauch 你的意思不是那么多?关于所述代码的意识“不是那么多”?
  • 您阅读了链接吗?
  • @StephenRauch 是的,它是一个可下载的数据库。我正在寻找更多的 API 类系统。
  • pytz 使用该数据库。

标签: python datetime timezone pytz datetimeoffset


【解决方案1】:

我假设之前的代码不了解每个国家/地区关于 DST 的政治决定,并且可能会根据固定的 DST 日期或类似的东西为您提供偏移量。

你的假设是错误的。时区的政治变化通过TZ Database 记录和分发。然后在数百个不同的库、平台和操作系统中实现这些更改,例如您提到的 pytz 库。

您描述的对America/Santiago 的更改反映在TZDB 2016c 中,该更改在pytz 2016.3 中实现。如果您使用的是 pytz 2016.3 或更高版本,那么您的代码会意识到此更改。

Pytz 很好,但您可能需要考虑使用 dateutil 代替。 Version 2.5.2 或更高版本有此数据。

【讨论】:

  • 感谢@Matt Johnson 非常完整的回答。如果我使用 PyTZ 或 dateutil,如果 TZ 数据库发生更改(例如:一个国家/地区决定不实施某些 DST 更改),我将不得不更新它们,对吗?
  • 确实如此。时区变化是不规则和不可预测的。掌握最新动态至关重要。另请参阅:codeofmatt.com/2016/04/23/on-the-timing-of-time-zone-changes 特别是底部标题为“对软件开发人员的建议”的部分。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2014-07-27
  • 2014-02-18
  • 2012-08-24
  • 2015-01-03
  • 1970-01-01
  • 2019-03-14
  • 2017-03-14
相关资源
最近更新 更多