在Python中,如何找到计算机设置的UTC时间偏移量?
答案 0 :(得分:74)
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 offset通过以下方式定义:“要获取本地时间,请将utc offset添加到utc time。”
在Python 3.3+中,如果底层C库支持它,则有tm_gmtoff
attribute:
utc_offset = time.localtime().tm_gmtoff
注意:time.daylight
可能会在some edge cases中给出错误的结果。
tm_gmtoff
将由datetime自动使用:
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
要以解决time.daylight
问题的方式获取当前UTC偏移量,即使tm_gmtoff
不可用,也可以使用@jts's suggestion来表示本地和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()
它在DST过渡期间有效,它适用于过去/未来日期,即使当地时区在当时具有不同的UTC偏移量,例如2010-2015期间的欧洲/莫斯科时区。
答案 1 :(得分:30)
gmtime()
将返回UTC时间,localtime()
将返回当地时间,因此减去两者应该给你utc偏移。
答案 2 :(得分:2)
我喜欢:
>>> strftime('%z')
'-0700'
我试过JTS'先回答,但它给了我错误的结果。我现在在-0700,但它说我在-0800。但是在我得到可以减去的东西之前我必须进行一些转换,所以答案可能比不正确还要复杂。
答案 3 :(得分:2)
time module具有时区偏移量,以“ UTC以西的秒数”中的整数表示。
import time
time.timezone
答案 4 :(得分:1)
hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60
答案 5 :(得分:0)
此简单功能使您可以轻松地从MySQL / PostgreSQL数据库date
对象获取当前时间。
def timestamp(date='2018-05-01'):
return int(time.mktime(
datetime.datetime.strptime( date, "%Y-%m-%d" ).timetuple()
)) + int(time.strftime('%z')) * 6 * 6
>>> timestamp('2018-05-01')
1525132800
>>> timestamp('2018-06-01')
1527811200
答案 6 :(得分:0)
您可以使用datetime
和dateutil
库将偏移量作为timedelta
对象获取:
>>> from datetime import datetime
>>> from dateutil.tz import tzlocal
>>>
>>> # From a datetime object
>>> current_time = datetime.now(tzlocal())
>>> current_time.utcoffset()
datetime.timedelta(seconds=7200)
>>> current_time.dst()
datetime.timedelta(seconds=3600)
>>>
>>> # From a tzlocal object
>>> time_zone = tzlocal()
>>> time_zone.utcoffset(datetime.now())
datetime.timedelta(seconds=7200)
>>> time_zone.dst(datetime.now())
datetime.timedelta(seconds=3600)
>>>
>>> print('Your UTC offset is {:+g}'.format(current_time.utcoffset().total_seconds()/3600))
Your UTC offset is +2
答案 7 :(得分:-1)
这是一些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'
答案 8 :(得分:-4)
这对我有用:
if time.daylight > 0:
return time.altzone
else:
return time.timezone