获取计算机&x27;Python中的UTC偏移量
在Python中,如何找到计算机设置的UTC时间偏移量获取计算机&x27;Python中的UTC偏移量,python,timezone,utc,Python,Timezone,Utc,在Python中,如何找到计算机设置的UTC时间偏移量 gmtime()将返回UTC时间,localtime()将返回本地时间,因此减去这两个时间将得到UTC偏移量 从 gmtime()函数应将计时器指向的历元后的时间(以秒为单位)转换为细分时间,表示为协调世界时(UTC) 因此,尽管名称为gmttime,函数仍返回UTC。: 它以秒为单位打印UTC偏移量(要考虑夏令时(DST),请参见: 其中utc偏移通过以下方式定义:“若要获取本地时间,请将utc偏移添加到utc时间。” 在Python 3
gmtime()
将返回UTC时间,localtime()
将返回本地时间,因此减去这两个时间将得到UTC偏移量
从
gmtime()函数应将计时器指向的历元后的时间(以秒为单位)转换为细分时间,表示为协调世界时(UTC)
因此,尽管名称为gmttime
,函数仍返回UTC。:
它以秒为单位打印UTC偏移量(要考虑夏令时(DST),请参见:
其中utc偏移通过以下方式定义:“若要获取本地时间,请将utc偏移添加到utc时间。”
在Python 3.3+中,如果底层C库支持它,则存在以下问题:
utc_offset = time.localtime().tm_gmtoff
注意:time.daylight
可能会给出错误的结果
tm\gmtoff
由datetime自动使用,如果它在Python 3.3+上可用:
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
要以解决时间.日光问题的方式获得当前UTC偏移量,并且即使tm\gmtoff
不可用,也能获得当前UTC偏移量,可以使用以下方法对本地时间和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年期间的欧洲/莫斯科时区。我喜欢:
>>> strftime('%z')
'-0700'
我先尝试了JTS的答案,但结果是错误的。我现在在-0700,但它说我在-0800。但是我必须先做一些转换,然后才能得到可以减去的东西,所以答案可能比不正确的更不完整。这里有一些python3代码,只有datetime和time作为导入。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
创建具有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
示例输出
有一个时区偏移量,以“UTC以西秒”为单位以整数表示
您可以使用datetime
和dateutil
库获取偏移量作为对象:
这很好,很干净。非常有用。谢谢,J.F。请注意,total_seconds()
仅在Python 3.2+中可用。@mattsttotal_seconds()
在Python 2.7和@raylou中可用,具体取决于您的意思。这里有一个“%z”
不受Python支持(它可能适用于某些系统,在这些系统中,您可能会使用time.localtime().tmgmtoff
,以数字而不是字符串的形式获取utc偏移量)。结果(在'%z'
)应该与@jts'答案相同。如果您不这样认为,请包含您的代码。导入时间time0=time.time()utc_time=time.mktime(time.gmtime(time0))local_time=time.mktime(time.localtime(time0))offset=local_time-utc_time print(offset/(60*60))给出-8.1.不要将代码放在注释中,而是更新您的答案2.在这里使用mktime()是不正确的,请使用calendar.timegm()
或datetime()
若要查找差异,对它们进行子跟踪将给出类型错误:不支持的操作数类型-:“time.struct\u time”和“time.struct\u time”
。您真正的意思是什么?Rakslicit,尝试calendar.timegm(time.gmtime())-calendar.timegm(time.localtime())@JasonTyler:为了避免种族冲突:@Kirby:。有些情况下GMT!=UTC,但事实并非如此。我想命名很难。谢谢你的澄清。这是错误的。注意:对不起,你的帖子太长太完整了,我不明白这是同一个答案。我的帖子肯定是同一解决方案的较短版本。不,代码是错误的。time.daylight
没有说明夏令时是否现在。它说当地时间可能有DST。这就是为什么你必须调用time.localtime().tm_isdst
GMT!=UTC.GMT有夏令时。UTC没有。实际上GMT与UTC相同。在英国,我们有英国夏令时(BST)有关夏令时。例如,请参见其中的“GMT(夏令时从不适用)”字样。
if time.daylight > 0:
return time.altzone
else:
return time.timezone
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
hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60
import time
time.timezone
>>> 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