如何使用pytz或datetime检查date是否为UTC格式



我使用pytz模块将日期从美国/洛杉矶时区转换为UTC,使用下面的代码:

TZ = 'America/Los_Angeles'
from = pytz.timezone(TZ)
utc = from.localize(original_date).astimezone(pytz.utc)

现在,我想测试UTC值是否实际上是UTC格式。如何使用pytz或datetime ?

接受的答案将不适用于pytz对象以外的任何对象。由于pytz实际上在进行转换方面非常糟糕[1](例如正确执行夏令时等),因此可能最好进行交叉实现检查。

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

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

您可以简单地这样做:

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或任何其他模块一起工作,因为您只是将时区作为字符串而不是作为对象进行检查(接受的答案将不适用于上述timezone模块情况,仅适用于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

与上一个答案类似,您可以这样做:

如果你有一个给定的datetime对象,你想首先用strftime()方法将其转换为字符串,然后传入%Z说明符,该说明符给出时区名称,根据文档返回'(empty), UTC, GMT'之一。

一个例子是:


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

相关内容

  • 没有找到相关文章

最新更新