python 检查日期是否为UTC格式

jucafojl  于 2023-06-04  发布在  Python
关注(0)|答案(4)|浏览(501)

我使用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?
请帮忙谢谢

s6fujrry

s6fujrry1#

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
oxcyiej7

oxcyiej72#

接受的答案将不适用于其他任何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](https://pendulum.eustace.io/blog/a-faster-alternative-to-pyz.html)

wljmcqd8

wljmcqd83#

你可以这样做:

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

7cwmlq89

7cwmlq894#

类似于前面的答案,你可以这样做:
如果你有一个给定的datetime对象,你首先要用strftime()方法将它转换成一个字符串,然后传入%Z说明符,它给出了时区名称,根据文档返回'(empty),UTC,GMT'之一。
例如:

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

相关问题