时区不正确



我想在用户输入日期&时获得时区时间。我住在中欧,我们在冬季UTC 001和夏季时间UTC 002这里有这里。问题是,我已经测试过Python在冬季和夏季总是给出夏季时间UTC 002。

示例:

import time
a=time.strptime("13 00 00 30 May 2017", "%H %M %S %d %b %Y")
a_s = time.mktime(a) # to convert in seconds
time.localtime(a_s) #local time
Output>>> time.struct_time(tm_year=2017, tm_mon=5, tm_mday=30, tm_hour=13, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=150, tm_isdst=1)
time.gmtime(a_s) # UTC time
Output>>> time.struct_time(tm_year=2017, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=150, tm_isdst=0)
#Now the Winter
b = time.strptime("13 00 00 20 Dec 2017", "%H %M %S %d %b %Y")
b_s = time.mktime(b)
time.localtime(b_s)
Output>>> time.struct_time(tm_year=2017, tm_mon=12, tm_mday=20, tm_hour=13, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=354, tm_isdst=0)
time.gmtime(b_s)
Output>>>time.struct_time(tm_year=2017, tm_mon=12, tm_mday=20, tm_hour=12, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=354, tm_isdst=0)
time.strftime("%H:%M:%S %z %Z",a)
Output>>>'13:00:00 +0200 Central European Summer Time'
time.strftime("%H:%M:%S %z %Z",b)
Output>>> '13:00:00 +0200 Central European Summer Time' #Wrong should be +0100 and Central European Time

time.strftime('%z %Z', tuple)返回UTC偏移的字符串表示形式和您本地机器当前正在使用的时区缩写。它不会试图弄清元组属于哪个时区。

要这样做,需要查找日光节省的时间范围和给定时区的相应UTCOFFSET。此信息在TZ中(" Olson")数据库,在Python中,大多数人都会委派这份工作到pytz模块。

import time
import datetime as DT
import pytz
FMT = "%H:%M:%S %z %Z"
tz = pytz.timezone('Europe/Berlin')
for datestring in ["13 00 00 30 May 2017", "13 00 00 20 Dec 2017"]:
    a = time.strptime(datestring, "%H %M %S %d %b %Y")
    a_s = time.mktime(a)  
    # naive datetimes are not associated to a timezone
    naive_date = DT.datetime.fromtimestamp(a_s)
    # use `tz.localize` to make naive datetimes "timezone aware"
    timezone_aware_date = tz.localize(date, is_dst=None)
    print(timezone_aware_date.strftime(FMT))

打印

13:00:00 +0200 CEST
13:00:00 +0100 CET

相关内容

  • 没有找到相关文章

最新更新