在Python中获取计算机的UTC偏移量
在Python中,怎么查看电脑设置的UTC时间偏移量?
10 个回答
我喜欢:
>>> strftime('%z')
'-0700'
我先试了JTS的回答,但结果不对。我现在是-0700时区,但它却说我是-0800时区。不过在我能进行减法运算之前,我还得做一些转换,所以可能这个答案并不是完全错误,而是有些不完整。
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年期间的欧洲/莫斯科时区。
gmtime()
函数会返回协调世界时(UTC),而 localtime()
函数则会返回你所在地区的本地时间。所以,把这两个时间相减,就能得到时区偏移量。
来源于 https://pubs.opengroup.org/onlinepubs/009695399/functions/gmtime.html
gmtime() 函数会把从某个时间点(称为纪元)开始的秒数转换成一个详细的时间,表示为协调世界时(UTC)。
所以,尽管名字里有 gmt
,这个函数实际上返回的是 UTC 时间。