我發現 pandas 如何將 UNIX 時間戳轉換為 python datetime 物件不一致:
d = datetime.datetime.utcnow()
timestamp = d.timestamp()
assert datetime.datetime.fromtimestamp(timestamp) == d
assert pd.to_datetime(timestamp, unit="s").to_pydatetime() == d
第一個斷言是正確的,而第二個斷言失敗了。Pandas 正在將 UTC 時間戳轉換為我的本地時區。
很難相信這是一個錯誤,所以我做錯了什么?
謝謝!
uj5u.com熱心網友回復:
問題很簡單,但并不明顯。utcnow()給你一個簡單的 datetime 物件,這意味著它不知道它代表 UTC 的事實。因此,一旦您呼叫.timestamp(),Python 就會假定本地時間,因為 datetime 物件是幼稚的!因此在計算 Unix 時間之前首先轉換為 UTC,添加本地 tz 可能具有的任何 UTC 偏移量。
解決方案:構造一個知道UTC的日期時間物件。同樣適用于fromtimestamp:將 UTC 設定為 tz !
from datetime import datetime, timezone
import pandas as pd
d = datetime.now(timezone.utc)
timestamp = d.timestamp()
assert datetime.fromtimestamp(timestamp, tz=timezone.utc) == d
assert pd.to_datetime(timestamp, unit="s", utc=True).to_pydatetime() == d
pandas這是一個不同的故事;naive datetime 在內部被視為 UTC,因此pd.to_datetime(timestamp, unit="s")為您提供 UTC 時間戳。但是轉換為 Python 日期時間并沒有考慮到 Python 會再次將其視為本地時間......在這里,保持一致和設定utc=True(即使用有意識的時間戳)使其作業得很好。
- 進一步閱讀:停止使用 utcnow 和 utcfromtimestamp
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/394490.html
