1

它大约是“2013-02-27 11:02”(格林威治标准时间),因为我在法国,我的当地时间大约是“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] 中设置时区,但显示了一个时区。那么,我在这里缺少什么?

4

1 回答 1

1

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

在我的(linux)机器上,man strftime显示有关strftimepython 例程可能包装的系统调用的信息。那里说使用了系统 TZ。这可以用tzset 修改

至于“不存在时区” - 我想这意味着当系统 TZ 未设置时。

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

于 2013-02-27T12:34:18.830 回答