奇怪的python time.strftime()时区显示

时间:2013-02-27 11:10:21

标签: python timezone strftime

在“2013-02-27 11:02”(GMT)附近,因为我在法国,我的当地时间是“2013-02-27 12:02 +0100”。 我在我的机器上播放了以下命令:

Python 2.6.8 (unknown, Apr 14 2012, 04:15:37) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> datefmt = '%Y-%m-%d %H:%M:%S %Z'
>>> paris_time = (time.gmtime(), time.localtime())
>>> paris_time[0]
time.struct_time(tm_year=2013, tm_mon=2, tm_mday=27, tm_hour=11, tm_min=2, tm_sec=2, tm_wday=2, tm_yday=58, tm_isdst=0)
>>> paris_time[1]
time.struct_time(tm_year=2013, tm_mon=2, tm_mday=27, tm_hour=12, tm_min=2, tm_sec=2, tm_wday=2, tm_yday=58, tm_isdst=0)
>>> time.strftime(datefmt, paris_time[0]), time.strftime(datefmt, paris_time[1])
('2013-02-27 11:02:02 CET', '2013-02-27 12:02:02 CET')
>>> 

然后我将我的机器时区更改为“纽约”并重播最后的命令:

>>> paris_time[0]
time.struct_time(tm_year=2013, tm_mon=2, tm_mday=27, tm_hour=11, tm_min=2, tm_sec=2, tm_wday=2, tm_yday=58, tm_isdst=0)
>>> paris_time[1]
time.struct_time(tm_year=2013, tm_mon=2, tm_mday=27, tm_hour=12, tm_min=2, tm_sec=2, tm_wday=2, tm_yday=58, tm_isdst=0)
>>> time.strftime(datefmt, paris_time[0]), time.strftime(datefmt, paris_time[1])
('2013-02-27 11:02:02 EST', '2013-02-27 12:02:02 EST')
>>> 

有关信息:CET是+0100的代码,EST是-0500的代码。

python time.strftime(format[, t])文档在表中说明:

  

%Z时区名称(如果不存在时区,则不包含字符)。

“没有时区存在”意味着什么? struct_time对象中的时区(编辑:我最初在我的问题中写了'strftime对象')或者在系统中?根据我的测试,我没有在对象paris_time [x]中设置时区,但是显示了时区。 那么,我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

python日期例程是(1)混乱的混乱和(2)系统调用的薄包装。

在我的(linux)机器上,man strftime显示有关python例程可能包含的系统调用strftime的信息。并且它说使用了系统TZ。这可以使用tzset进行修改。

就“没有时区”而言 - 我想这意味着系统TZ未设置。

(我不知道这是如何传播到Windows的。)