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

问题描述:

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

gmtime()将返回UTC时间,localtime()将返回本地时间,因此减去两者应该会给你utc偏移量。

+0

辉煌!我需要学会思考简单:) – Paul 2010-07-02 18:24:05

+0

这里有一些优雅的简单。 – 2015-03-30 03:22:45

+1

减去它们给'TypeError:不支持的操作数类型为 - :'time.struct_time'和'time.struct_time'。你究竟是什么意思? – rakslice 2015-05-01 21:45:00

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+中有tm_gmtoff attribute如果底层C库支持它:

utc_offset = time.localtime().tm_gmtoff 

注:time.daylight可以在some edge cases给出一个错误的结果。

tm_gmtoff所使用的日期时间自动(如果可用)上的Python 3.3+:

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's suggestion到substruct本地和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

这是很好,干净。 – Rockallite 2013-12-19 02:25:51

+1

超级有用。谢谢,J.F. – 2015-03-30 03:23:13

+0

请注意,'total_seconds()'仅在Python 3.2+中可用。 – mattst 2016-06-04 13:46:11

我喜欢:

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

我第一次尝试JTS”的答案,但它给了我错误的结果。我现在在-0700,但它是说我在-0800。但是在我能够减去某些东西之前,我必须做一些转换,所以也许答案比不正确。

+1

Python不支持''%z''(它可能适用于某些可能使用'time.localtime()。tm_gmtoff')的系统,以获取utc偏移量作为数字,而不是字符串)。 (''%z'')的结果应该与@jts的答案相同。如果您不这么想,请包括您的代码。 – jfs 2015-04-04 13:23:49

+0

导入时间 时间0 =了time.time() UTC_TIME = time.mktime(time.gmtime(时间0)) LOCAL_TIME = time.mktime(time.localtime(时间0)) 偏移= LOCAL_TIME - UTC_TIME 打印(偏移/(60 * 60)) 给出-8。 – dstromberg 2015-04-04 18:09:40

+0

1.不要把代码放在注释里,而是更新你的答案2.这里使用mktime()是不正确的,用'calendar.timegm()'或'datetime()'来找到差异 – jfs 2015-04-04 18:24:08

这里是一些只有日期时间和时间作为导入的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 
+0

它是不正确。注意:['time.localtime()。tm_isdst> 0'在我的答案中有类似的代码](http://*.com/a/3168394/4279) – jfs 2015-09-22 22:59:18

+0

对不起,你的文章太长了,我完成了没有理解,这是相同的答案。我的帖子肯定是相同解决方案的较短版本。 – Alecs 2015-09-23 11:30:51

+1

不,代码是错误的。 'time.daylight'没有说明夏天是否现在。它说当地时间可能有DST。这就是为什么你必须调用'time.localtime()。tm_isdst' – jfs 2015-09-23 12:57:35