我試圖將美國/東部時區日期轉換爲UTC以上傳到只接受UTC時間的網站,但在本地時區顯示時間。我有以下代碼示例,其中當我轉換最近的日期時,偏移量(5:00或4:00)沒有問題,但是當我轉換日期(如1900-01-01)時,偏移量變成了4:56等Python pytz時區轉換返回不同日期的時區偏移值
import pytz
import tzlocal
from datetime import datetime
usest=tzlocal.get_localzone()#My local zone is US/Eastern. I could directly use that here as pytz.timezone("US/Eastern")
dt=datetime(1900,1,1,0,0,0)
dt_aware=usest.localize(dt,is_dst=True)
utcdate=dt_aware.astimezone(pytz.utc)
print (utcdate)
1900-01-01 04:56:00+00:00
dt1=datetime(2016,1,1,0,0,0)
dt1_aware=usest.localize(dt1,is_dst=True)
utcdate1=dt1_aware.astimezone(pytz.utc)
print (utcdate1)
2016-01-01 05:00:00+00:00
我期待1900-01-01 05:00:00 + 00:00以及第一次約會。這是爲什麼發生?它是否正確?
需要注意的是,當我將UTC時間「1900-01-01 04:56:00 + 00:00」轉換回美國/東部時間時,它會轉換回「1900-01-0100 :00:00" 。所以,幾分鐘的差別必須有一些邏輯背後的邏輯。
我節下發現這個維基百科網站 「https://en.wikipedia.org/wiki/Tz_database」, 「實施例區和規則線」
區域名稱GMTOFF規則FORMAT [UNTIL]
區美國/紐約-4:56:02 - LMT 1883 Nov 18 12:03:58
我不一定明白他們在說什麼,但我在那裏看到偏移量4:56。我覺得我更接近答案,但需要一些幫助。
更新:我在我的Mac book pro上試過了zdump,並從1901年獲得了輸出結果。無法獲得多年前的詳細信息。我研究了tz數據庫中提供的細節,但找不到明確的答案。對於我目前的項目來說,我使用了另一個區域轉換器模塊(鐘擺),它不會試圖忠實於歷史記錄,但會遵循當前的夏令時週期來解決我的問題。但是,問題依然存在。爲什麼在1900年之前轉換東部時區和UTC之間的日期時,會出現與5:00/4:00小時不同的時間偏移?
我在一臺Windows機器上。但是,我會嘗試啓動一個Linux環境並在一兩天內測試。 – Raj006
我可以在python中使用pytz模塊來獲取相同的信息而不使用unix環境。 – Raj006
你可以從pytz中得到相同的信息,但這只是讓pytz同意自己:)生成這樣的表所需的信息也不容易訪問。沒有API以友好的方式訪問轉換時間。 – stub