奇怪的Python time.strftime()时区显示
现在是“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]对象中没有设置时区,但却显示了一个时区。
那么,我到底漏掉了什么呢?
1 个回答
1
Python的日期处理功能其实有两个问题:第一,它们让人感到很困惑;第二,它们只是对系统调用的一个简单封装。
在我的Linux电脑上,输入man strftime
可以看到关于系统调用strftime
的信息,而这个调用正是Python的日期处理功能所依赖的。这里面提到,系统的时区(TZ)会被使用。你可以通过tzset来修改这个时区。
至于“没有时区存在”这句话,我猜是指系统的时区没有设置的时候。
(我对这在Windows上的表现也不太清楚。)