Getting computer's UTC offset in Python
在python中,如何找到计算机设置的UTC时间偏移量?
时区:
1 2 3 | import time print -time.timezone |
它以秒为单位打印UTC偏移量(要考虑夏令时(DST),请参阅time.altzone:
1 2 | 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库支持
1 | utc_offset = time.localtime().tm_gmtoff |
注:
如果在python 3.3+上可用,datetime将自动使用
1 2 3 4 | from datetime import datetime, timedelta, timezone d = datetime.now(timezone.utc).astimezone() utc_offset = d.utcoffset() // timedelta(seconds=1) |
要以解决
1 2 3 4 5 6 | import time from datetime import datetime ts = time.time() utc_offset = (datetime.fromtimestamp(ts) - datetime.utcfromtimestamp(ts)).total_seconds() |
要获得过去/未来日期的UTC偏移量,可以使用
1 2 3 4 5 6 | 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时差,例如欧洲/莫斯科时区。
我喜欢:
1 2 | >>> strftime('%z') '-0700' |
我先试了JTS的答案,但结果不对。我现在在-0700,但它说我在-0800。但是我必须做一些转换才能得到我可以减去的东西,所以也许答案是不完整的,而不是不正确的。
1 | hours_delta = (time.mktime(time.localtime()) - time.mktime(time.gmtime())) / 60 / 60 |
使用更正了UTC的时区创建Unix时间戳
这个简单的函数将使您很容易从mysql/postgresql数据库
1 2 3 4 | def timestamp(date='2018-05-01'): return int(time.mktime( datetime.datetime.strptime( date,"%Y-%m-%d" ).timetuple() )) + int(time.strftime('%z')) * 6 * 6 |
实例输出
1 2 3 4 | >>> timestamp('2018-05-01') 1525132800 >>> timestamp('2018-06-01') 1527811200 |
下面是一些python3代码,其中只有日期时间和时间作为导入。高温高压
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> 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' |
这对我很有用:
1 2 3 4 | if time.daylight > 0: return time.altzone else: return time.timezone |