我有一個從 MQTT 代理傳播的時間字串,我想讀取該字串并將其從其本地時區(美國中部時間)轉換為協調世界時 (UTC)。我目前在 Ubuntu 20.04 Focal Fossa 中使用 Python 3.8.5,機器時區設定為 UTC。
時間字串如下:1636039288.815212
為了在 Python 中處理這個時間,我使用了 datetime 和 pytz 庫的組合。我目前的核心代碼如下:
from datetime import datetime, timedelta
import pytz
input = 1636039288.815212
srctime = datetime.fromtimestamp(input, tz=pytz.timezone('US/Central'))
運行這個塊后,我收到以下不需要的時間輸出:
datetime.datetime(2021, 11, 4, 10, 21, 28, 815212, tzinfo=<DstTzInfo 'US/Central' CDT-1 day, 19:00:00 DST>)
看來,盡管在初始時間戳轉換中明確定義了“美國/中部”,但隨后提供的初始時間減去了 5 小時。
我可以采取哪些額外的步驟/更改來確保提供的初始時間不變,定義為美國/中部,并且我可以隨后更改為 UTC?
uj5u.com熱心網友回復:
Pythonfromtimestamp假設您的輸入是UNIX time,它應該指 1970-01-01 UTC,而不是某個任意時區。如果你仍然遇到這樣的事情,你需要設定 UTC,然后replace設定 tzinfo:
from datetime import datetime
from dateutil import tz # pip install python-dateutil
ts = 1636039288.815212
dt = datetime.fromtimestamp(ts, tz=tz.UTC).replace(tzinfo=tz.gettz("US/Central"))
print(dt)
# 2021-11-04 16:21:28.815212-05:00
# or in UTC:
print(dt.astimezone(tz.UTC))
# 2021-11-04 20:21:28.815212 00:00
請注意,我在dateutil這里使用是為了確保替換操作是安全的。不要用 pytz 這樣做(你必須localize在那里使用)。升級到 Python 3.9 后,請改用zoneinfo,因此您只需要標準庫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351668.html
下一篇:查找并發運行事務的總“等待”時間
