簡體   English   中英

檢查日期是否為 UTC 格式

[英]Checking if date is in UTC format

我使用 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 做到這一點?

請幫忙謝謝

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

接受的答案不適用於其他任何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

你可以像這樣簡單地做到這一點:

from datetime import datetime, timezone
lunch_time = datetime.now(timezone.utc)

if lunch_time.format('%Z') == 'UTC':
     print("Eat food")

這也適用於原始時間 object,因為lunch_time.format('%Z')將返回一個空字符串。 此方法也適用於 pytz 或任何其他模塊,因為您只是將時區檢查為字符串而不是 object(接受的答案不適用於上述時區模塊案例,僅適用於 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對於格林威治標准時間將為真,這可能不是您想要的。

%Z 說明符記錄在此處:
https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

與之前的答案類似,您可以這樣做:

如果您有給定的日期時間 object,您希望首先使用 strftime() 方法將其轉換為字符串,然后傳入 %Z 說明符,該說明符給出返回“(空)、UTC、GMT 之一的時區名稱”文檔。

所以一個例子是:


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM