如何使用pytz或datetime检查日期是否为UTC格式?
我正在使用pytz这个模块,把一个来自美国洛杉矶时区的日期转换成UTC时间,代码如下:
TZ = 'America/Los_Angeles'
from = pytz.timezone(TZ)
utc = from.localize(original_date).astimezone(pytz.utc)
现在,我想测试一下这个UTC值到底是不是UTC格式的。请问我该怎么用pytz或者datetime来检查呢?
4 个回答
1
你可以简单地这样做:
from datetime import datetime, timezone
lunch_time = datetime.now(timezone.utc)
if lunch_time.format('%Z') == 'UTC':
print("Eat food")
这个方法也适用于简单的时间对象,因为 lunch_time.format('%Z')
会返回一个空字符串。这个方法也可以和 pytz 或其他模块一起使用,因为你只是把时区当作字符串来检查,而不是作为对象(上面的答案在使用时区模块时不适用,只能用 pytz)。
from datetime import datetime
import pytz
dinner_time = datetime.now(pytz.timezone('UTC'))
if dinner_time.format('%Z') == 'UTC':
print("Hungry!")
注意:这样做也会排除时区是 GMT 而不是 UTC 的可能性。另一个答案 now.utcoffset().total_seconds() == 0
在 GMT 时会返回 True,这可能不是你想要的结果。
%Z 这个标识符的详细信息可以在这里找到:
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
10
这个被接受的答案只适用于pytz
对象。其实,pytz
在进行时间转换方面表现得并不好,比如处理夏令时等问题。因此,做一个跨实现的检查可能会更好。
now = datetime.datetime.now(pytz.utc)
if now.tzinfo:
now.utcoffset().total_seconds() == 0 # returns true
[1] https://pendulum.eustace.io/blog/a-faster-alternative-to-pyz.html
7
utc.tzinfo == pytz.utc # returns True if utc in UTC
示例:
now = datetime.datetime.now(pytz.utc)
now.tzinfo == pytz.utc # returns True
now = now.astimezone(pytz.timezone('America/Los_Angeles'))
now.tzinfo == pytz.utc # returns False