在Python中获取计算机的UTC偏移量

74 投票
10 回答
70231 浏览
提问于 2025-04-16 00:44

在Python中,怎么查看电脑设置的UTC时间偏移量?

10 个回答

6

我喜欢:

>>> strftime('%z')
'-0700'

我先试了JTS的回答,但结果不对。我现在是-0700时区,但它却说我是-0800时区。不过在我能进行减法运算之前,我还得做一些转换,所以可能这个答案并不是完全错误,而是有些不完整。

109

time.timezone:

import time

print -time.timezone

这个函数会输出当前时间与协调世界时(UTC)之间的时差,单位是秒。如果要考虑夏令时(DST),可以查看time.altzone

is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)

这里的UTC时差是这样定义的:“要获取本地时间,可以把UTC时刻加上这个时差。”

在Python 3.3及以上版本中,如果底层的C库支持的话,会有一个tm_gmtoff属性

utc_offset = time.localtime().tm_gmtoff

注意:在某些特殊情况下time.daylight可能会给出错误的结果。

如果在Python 3.3及以上版本中可用,tm_gmtoff会被datetime自动使用:

from datetime import datetime, timedelta, timezone

d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)

为了获取当前的UTC时差,可以用一种方法来解决time.daylight的问题,即使tm_gmtoff不可用,也可以使用@jts的建议,通过计算本地时间和UTC时间的差来得到:

import time
from datetime import datetime

ts = time.time()
utc_offset = (datetime.fromtimestamp(ts) -
              datetime.utcfromtimestamp(ts)).total_seconds()

如果想要获取过去或未来日期的UTC时差,可以使用pytz时区库:

from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal

tz = get_localzone() # local timezone 
d = datetime.now(tz) # or some other local date 
utc_offset = d.utcoffset().total_seconds()

这个方法在夏令时转换期间也能正常工作,能够处理过去和未来的日期,即使在那个时候本地时区的UTC时差不同,比如2010到2015年期间的欧洲/莫斯科时区。

34

gmtime() 函数会返回协调世界时(UTC),而 localtime() 函数则会返回你所在地区的本地时间。所以,把这两个时间相减,就能得到时区偏移量。

来源于 https://pubs.opengroup.org/onlinepubs/009695399/functions/gmtime.html

gmtime() 函数会把从某个时间点(称为纪元)开始的秒数转换成一个详细的时间,表示为协调世界时(UTC)。

所以,尽管名字里有 gmt,这个函数实际上返回的是 UTC 时间。

撰写回答