关于datetime:在Python中获取系统的时区信息?

Get time zone information of the system in Python?

我想从Python获取我的系统的默认时区(PST)。 最好的方法是什么? 我想避免分支另一个过程。


这应该工作:

1
2
import time
time.tzname

time.tzname返回两个字符串的元组:第一个是本地非DST时区的名称,第二个是本地DST时区的名称。

返回示例:('MST', 'MDT')


给出了像ThomasH的回答中的UTC偏移,但考虑了夏令时。

1
2
3
4
>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9

time.timezonetime.altzone的值以UTC的西部秒为单位(UTC的东部区域为负值)。这与我们实际喜欢它的方式相反,因此* -1。

如果夏令时目前没有生效,time.localtime().tm_isdst将为零(尽管如果某个地区最近改变了其夏令时法则,这可能不正确)。

编辑:marr75是正确的,我已经相应地编辑了答案。


查看Python时间模块。

1
2
from time import gmtime, strftime
print(strftime("%z", gmtime()))

太平洋标准时间


用于计算偏移量的代码片段不正确,请参阅http://bugs.python.org/issue7229。

处理这个问题的正确方法是:

1
2
3
4
5
6
7
8
9
10
def local_time_offset(t=None):
   """Return offset of local zone from GMT, either at present or at time t."""
    # python2.3 localtime() can't take None
    if t is None:
        t = time.time()

    if time.localtime(t).tm_isdst and time.daylight:
        return -time.altzone
    else:
        return -time.timezone

这很有可能,而不是OP提出的确切问题,但页面上有两个不正确的片段,时间错误很难追踪和修复。


我发现这很好用:

1
2
import datetime
tz_string = datetime.datetime.now(datetime.timezone.utc).astimezone().tzname()

对我来说,这能够区分夏令时与否。

https://stackoverflow.com/a/39079819/4549682


如果您更喜欢UTC偏移字符串:

1
time.timezone / -(60*60)