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

时间:2010-07-02 18:09:00

标签: python timezone utc

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

9 个答案:

答案 0 :(得分:74)

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 offset通过以下方式定义:“要获取本地时间,请将utc offset添加到utc time。”

在Python 3.3+中,如果底层C库支持它,则有tm_gmtoff attribute

utc_offset = time.localtime().tm_gmtoff

注意:time.daylight可能会在some edge cases中给出错误的结果。

如果在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)

要以解决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)

使用UTC校正的时区创建Unix时间戳

此简单功能使您可以轻松地从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)

您可以使用datetimedateutil库将偏移量作为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