我使用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?请帮忙谢谢
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
oxcyiej72#
接受的答案将不适用于其他任何pytz对象。因为pytz实际上在进行转换时非常糟糕[1](例如:正确地执行夏令时等),可能最好执行交叉实现检查。
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](https://pendulum.eustace.io/blog/a-faster-alternative-to-pyz.html)
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)。
lunch_time.format('%Z')
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
now.utcoffset().total_seconds() == 0
7cwmlq894#
类似于前面的答案,你可以这样做:如果你有一个给定的datetime对象,你首先要用strftime()方法将它转换成一个字符串,然后传入%Z说明符,它给出了时区名称,根据文档返回'(empty),UTC,GMT'之一。例如:
def check_if_utc(my_datetime): return my_datetime.strftime('%Z') == 'UTC'
4条答案
按热度按时间s6fujrry1#
示例:
oxcyiej72#
接受的答案将不适用于其他任何
pytz
对象。因为pytz
实际上在进行转换时非常糟糕[1](例如:正确地执行夏令时等),可能最好执行交叉实现检查。[1][https://pendulum.eustace.io/blog/a-faster-alternative-to-pyz.html](https://pendulum.eustace.io/blog/a-faster-alternative-to-pyz.html)
wljmcqd83#
你可以这样做:
这也适用于简单的时间对象,因为
lunch_time.format('%Z')
将返回空字符串。这个方法也适用于pytz或任何其他模块,因为你只是简单地将时区作为字符串而不是作为对象进行检查(接受的答案不适用于上面的timezone模块,只适用于pytz)。注意:这也将消除时区是GMT时区而不是UTC时区的可能性。另一个答案
now.utcoffset().total_seconds() == 0
对于GMT将是True,这可能不是您想要的。%Z说明符记录在此处:
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
7cwmlq894#
类似于前面的答案,你可以这样做:
如果你有一个给定的datetime对象,你首先要用strftime()方法将它转换成一个字符串,然后传入%Z说明符,它给出了时区名称,根据文档返回'(empty),UTC,GMT'之一。
例如: