在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