我有一些代码如下所示,但时区 %Z 正在返回:01:04:48 GMT Daylight Time
我需要它返回:格林威治标准时间 01:04:48
import time
timenew = time.strftime('%H:%M:%S %Z')
print timenew
任何人都知道我该如何解决/做到这一点?
我有一些代码如下所示,但时区 %Z 正在返回:01:04:48 GMT Daylight Time
我需要它返回:格林威治标准时间 01:04:48
import time
timenew = time.strftime('%H:%M:%S %Z')
print timenew
任何人都知道我该如何解决/做到这一点?
懒人方式:
time.strftime('%H:%M:%S %Z')[:13]
问题是%Z
根本没有记录为您提供任何特定格式;它只是给你:
时区名称(如果不存在时区,则无字符)。
对于 POSIX 平台上的 CPython 2.7 或 3.3,它通常会为您提供美国主要时区格式EST
/EDT
的内容,但它可能会为您提供主要欧盟时区格式GMT
/ GMT Daylight Time
(或British Summer Time
或GMT 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 规则,只需替换名称即可。
您可以使用 gmtime 将其强制为 GMT:
In [11]: time.strftime('%H:%M:%S %z', time.gmtime())
Out[11]: '00:13:17 +0000'
但是,现在是格林威治标准时间 00:13(而不是夏令时 1:13)。