0

我有一些代码如下所示,但时区 %Z 正在返回:01:04:48 GMT Daylight Time

我需要它返回:格林威治标准时间 01:04:48

import time

timenew = time.strftime('%H:%M:%S %Z')
print timenew

任何人都知道我该如何解决/做到这一点?

4

4 回答 4

5

懒人方式:

time.strftime('%H:%M:%S %Z')[:13]
于 2013-06-18T00:16:33.670 回答
5

问题是%Z根本没有记录为您提供任何特定格式;它只是给你:

时区名称(如果不存在时区,则无字符)。

对于 POSIX 平台上的 CPython 2.7 或 3.3,它通常会为您提供美国主要时区格式EST/EDT的内容,但它可能会为您提供主要欧盟时区格式GMT/ GMT Daylight Time(或British Summer TimeGMT Summer Time)的内容,但事实并非如此在任何地方都得到保证,而你在其他地方得到的东西很难预测。

因此,如果您只关心您的特定平台,并且只关心美国和欧盟的主要时区,并且您知道它给了您GMT Daylight Time(而不是说,British Summer Time您可能不想截断为Bri),您可以这样做像这样的东西:

tz = time.strftime('%Z')[:3]
if tz.endswith('DT'): tz = tz[0] + 'ST'
timenow = time.strftime(''%H:%M:%S ') + tz

如果您查看源代码,您会发现time.strftime最终只是调用了您平台的strftime. 在 POSIX 平台上,标准将 %Z 定义为:

替换为时区名称或缩写,如果不存在时区信息,则替换为无字节。[tm_isdst]

尽管该页面上没有很清楚地说明,但最终,您得到的是 extern 变量tzname[0] 或tzname[1] 的值,具体取决于 isdst,并且 Python 公开tzset了,因此您可以执行以下操作:

os.environ['TZ'] = 'GMT'
time.tzset()

现在,'%Z' 保证返回GMT。或者您可以保留 Daylight/Summer Time 支持,但只需提供相同的名称:

os.environ['TZ'] = 'GMT+00GMT'

或者,理想情况下,您可以为活动时区提供正确的 DST 规则,只需替换名称即可。

于 2013-06-18T00:17:53.673 回答
3

您可以使用 gmtime 将其强制为 GMT:

In [11]: time.strftime('%H:%M:%S %z', time.gmtime())
Out[11]: '00:13:17 +0000'

但是,现在是格林威治标准时间 00:13(而不是夏令时 1:13)。

于 2013-06-18T00:14:42.643 回答
2

GMT 不针对夏令时进行调整。你可以在这个网站上从马的嘴里听到它。“%Z”只是意味着:

时区名称(如果不存在时区,则无字符)。

所以你可以把绳子剥掉。

于 2013-06-18T00:44:56.543 回答