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

5
我正在使用pytz模块将一个日期从America/Los_Angeles时区转换为UTC,使用以下代码:
TZ = 'America/Los_Angeles'
from = pytz.timezone(TZ)
utc = from.localize(original_date).astimezone(pytz.utc)

现在,我想测试一下UTC值是否实际上是以UTC格式表示的。如何使用pytz或datetime来进行测试?
4个回答

8

谢谢,当我使用pytz时,从使用dateutil的库接受输入时,这个问题困扰了我。 - theY4Kman
只是提醒一下,total_seconds() 返回一个浮点数。虽然你很少会遇到与整数0比较失败的情况,但你可以通过使用 int(now.utcoffset().total_seconds()) == 0 来确保。 - idoimaging
@idoimaging int(now.utcoffset().total_seconds()) == 0 如果时区是GMT,则返回True... datetime.now(pytz.timezone("GMT")). GMT和UTC时间显然是相同的。 - theQuestionMan

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

4
没有使用pytz的示例? - alexche8
3
@alexche8,这段代码需要导入dateutildatetime模块,然后创建一个当前时间对象now,其时区为UTC。最后判断now的时区是否为UTC。 - nikpod
3
datetime.timezone.utc 不等同于 pytz.utc,因此使用标准的 UTC 时区对象会失败。 - Mitar

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

0

与之前的答案类似,您可以这样做:

如果您有一个给定的日期时间对象,您首先需要使用strftime()方法将其转换为字符串,然后传入%Z指示符,该指示符返回时区名称,根据文档返回其中之一:'(empty), UTC, GMT'。

因此,一个示例是:


def check_if_utc(my_datetime):
   return my_datetime.strftime('%Z') == 'UTC'
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接