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

在Python中,如何查找计算机设置的UTC时间偏移量?

gmtime()将返回UTC时间, localtime()将返回本地时间,所以减去两个应该给你的utc偏移量。

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偏移量添加到utc时间”。

在Python 3.3+中,如果底层C库支持它,则tm_gmtoff属性 :

 utc_offset = time.localtime().tm_gmtoff 

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

tm_gmtoff如果在Python 3.3+上可用,则由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的build议来描述本地和UTC时间:

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

为了获得过去/未来date的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() 

它在DST转换期间工作,即使当地时区在2010 – 2015年期间,例如欧洲/莫斯科时区具有不同的UTC偏移时,也适用于过去/未来date。

我喜欢:

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

我首先尝试了JTS的答案,但它给了我错误的结果。 我现在在-0700,但是这是说我在-0800。 但是在得到可以减去的东西之前,我必须做一些转换,所以也许答案比不正确。

这里是一些只有datetime和time的python3代码作为导入。 HTH

 >>> from datetime import datetime >>> import time >>> def date2iso(thedate): ... strdate = thedate.strftime("%Y-%m-%dT%H:%M:%S") ... minute = (time.localtime().tm_gmtoff / 60) % 60 ... hour = ((time.localtime().tm_gmtoff / 60) - minute) / 60 ... utcoffset = "%.2d%.2d" %(hour, minute) ... if utcoffset[0] != '-': ... utcoffset = '+' + utcoffset ... return strdate + utcoffset ... >>> date2iso(datetime.fromtimestamp(time.time())) '2015-04-06T23:56:30-0400' 

这适用于我:

 if time.daylight > 0: return time.altzone else: return time.timezone