从日期和时区计算tm_isdst
问题内容:
当我跑线时
time.strptime("2012-06-01 12:00:00 "+time.strftime("%Z"), "%Y-%m-%d %H:%M:%S %Z")
它为我创建了一个结构,但标志tm_isdst
是错误的。DST在6月1日生效,但是无论我输入哪个日期,该tm_isdst
标志始终设置为localtime()
现在的状态。我需要知道在输入日期DST是否处于活动状态。
问题答案:
首先,不要包含time.strftime('%Z')
您的格式。您要告诉它当前的GMT偏移量(包括夏令时关闭),并且[可能]使用它来设置tm_isdst。
没有这个,你应该得到一个结构体tm_isdst=-1
:
>>> time1 = time.strptime("2012-06-01 12:00:00", "%Y-%m-%d %H:%M:%S")
>>> time1
time.struct_time(tm_year=2012, tm_mon=6, tm_mday=1, tm_hour=12, tm_min=0,
tm_sec=0, tm_wday=4, tm_yday=153, tm_isdst=-1)
现在,您可以将其传递给mktime,它将根据给定的-1
值“猜测” DST值(我将“
guess”用引号引起来,因为除了模棱两可的2AM情况之外,它总是正确的)。这将以time()
格式给出绝对时间。
>>> time.mktime([previous value]) # my timezone is US Eastern
1338566400.0
然后,您可以使用此值调用localtime,它将具有正确设置的DST标志:
>>> time.localtime(1338566400).tm_isdst
1
您也可以跳过strptime步骤,并将值直接传递给mktime:
>>> time.mktime((2012,6,1,12,0,0,-1,-1,-1))
1338566400.0