在許多情況下,在Python 中處理日期和時間需要將它們轉換為UTC時間戳與在通用協調時間上運行的其他系統或框架無縫整合。然而,這個轉換過程可能會遇到障礙。例如,下面的程式碼片段會產生意外結果:
import datetime d = datetime.date(2011, 01, 01) # A date object timestamp = datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple())) print(timestamp) # Output: datetime.datetime(2010, 12, 31, 23, 0)
預期結果是 2011 年 1 月 1 日的 UTC 時間戳,但我們得到的是 2010 年 12 月 31 日 23:00 UTC。
讓我們探討這個問題的解決方案,並了解如何取得日期物件的正確UTC 時間戳Python.
提供的日期對象d 是原生Python 日期對象,表示沒有任何時間資訊的日期。要取得正確的 UTC 時間戳,我們需要確保在 UTC 上下文中明確考慮日期物件。
這裡有兩種方法可以實現此目的:
選項1:使用calendar.timegm()
此方法假設日期物件d 採用日期物件d 採用UTC時區。
import calendar timestamp = calendar.timegm(d.timetuple()) print(timestamp) # Output: 1293840000
輸出是 2011 年 1 月 1 日 00:00 的正確 UTC 時間戳記。
選項2:使用datetime.timestamp()
此選項在Python 3.3 及更高版本中可用,需要我們明確指定獲取時間戳之前的UTC時區。
from datetime import timezone d_utc = d.replace(tzinfo=timezone.utc) # Explicitly specify UTC timezone timestamp = d_utc.timestamp() print(timestamp)
輸出與先前的方法一致。
如果您有日期時間對象而不是日期對象,則轉換過程略有不同。您可以使用以下方法:
Python 3.3
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
Python 3 (
timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)) / timedelta(seconds=1)
Python 2
timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
請小心潛在的浮點問題並確保時間戳的準確性。
以上是如何正確地將Python日期物件轉換為UTC時間戳記?的詳細內容。更多資訊請關注PHP中文網其他相關文章!