【问题标题】:How do I automatically get the timezone offset for my local time zone? [duplicate]如何自动获取本地时区的时区偏移量? [复制]
【发布时间】:2012-08-14 10:56:15
【问题描述】:

我正在尝试自动获取本地时区偏移量,但遇到了麻烦。我试过了:

print time.timezone/3600

这会得到(当前错误的)偏移量,因为它不会针对夏令时和非 DST 自动调整。

我也试过了:

now_utc = pytz.utc.localize(datetime.datetime.now())
now_mst = now_utc.astimezone(pytz.timezone('US/Mountain'))

这会得到正确的偏移值,但我想自动设置“美国/山地”部分,这样我就不必手动输入任何东西来获得偏移量。

有没有办法获得正确的偏移量,可以根据 DST 和非 DST 自动调整?

我将在不同地理位置的多台服务器上运行此脚本,如果可以的话,我想自动获取 tz 偏移量。

【问题讨论】:

标签: python datetime time timezone


【解决方案1】:

您可以为此使用dateutil 模块。立即获取当地时区:

>>> import dateutil.tz
>>> import datetime
>>> localtz = dateutil.tz.tzlocal()
>>> localtz.tzname(datetime.datetime.now(localtz))
'EDT'

我目前处于东部夏令时间。在夏令时切换回来后,您可以看到它在未来变回 EST:

>>> localtz.tzname(datetime.datetime.now(localtz) +
                   datetime.timedelta(weeks=20))
'EST'

如果你想要从 UTC 偏移,你可以使用 utcoffset 函数。它返回一个时间增量:

>>> localtz.utcoffset(datetime.datetime.now(localtz))
datetime.timedelta(-1, 72000)

在这种情况下,由于我是 UTC-4,它返回 -1 天 + 20 小时。如果需要,您可以将其转换为小时:

>>> localoffset = localtz.utcoffset(datetime.datetime.now(localtz))
>>> localoffset.total_seconds() / 3600
-4.0

【讨论】:

  • 我需要本地时区偏移量,而不是时区
  • 抱歉,更新了如何获取偏移量
  • datetime.now() 可能不明确,即代码可能在 DST 转换期间返回错误的 UTC 偏移量,请使用 .now(local_tz) 明确获取时间。
  • 如果由于与 DST 无关的原因(例如在 2010-2015 年期间尝试欧洲/莫斯科时区。使用可以返回正确 UTC 偏移量的 pytz 时区。
  • @J.F.Sebastian - 更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2021-04-11
  • 2022-01-10
  • 2011-01-07
  • 2013-01-13
  • 2015-05-18
相关资源
最近更新 更多