如何使用pytz或datetime检查日期是否为UTC格式?

6 投票
4 回答
11202 浏览
提问于 2025-04-16 21:36

我正在使用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

撰写回答