13

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

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 偏移量。

4

1 回答 1

17

您可以为此使用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
于 2012-08-18T02:05:22.950 回答