[英]How do I get the correct difference between python daytime.time from different time zones?
我已經實例化了兩個具有不同時區的datetime.time對象。 然后,我嘗試獲取兩個對象之間的時間差。 在此示例中,我在拉巴斯和利馬設置了一個時間(在各自的時區均為10:29)。 然后,我使用datetime.combine嘗試獲取時間差。
from datetime import time, datetime, date
from pytz import timezone
departure_timezone = timezone('America/La_Paz')
arrival_timezone = timezone('America/Lima')
departure_time = time(hour=10, minute=29, tzinfo=departure_timezone)
arrival_time = time(hour=10, minute=29, tzinfo=arrival_timezone)
dateTimeA = datetime.combine(date.today(), departure_time)
dateTimeB = datetime.combine(date.today(), arrival_time)
diff = dateTimeB - dateTimeA
print(dateTimeA)
print(dateTimeB)
print(diff)
然后打印
2018-02-20 10:29:00-04:33
2018-02-20 10:29:00-05:08
0:35:00
這不是我所期望的,因為拉巴斯和利馬之間的時差是1小時,但我得到了35分鍾。 為了獲得預期的結果,我需要更改什么?
您需要使用timezone.localize()
方法; pytz
時區包含所有歷史時區更改,分配給tzinfo
總是會做錯事。 參見文檔 :
該庫僅支持構建本地化時間的兩種方式。 第一種是使用pytz庫提供的localize()方法。
[...]
不幸的是,在許多時區中,使用標准
datetime
構造函數的tzinfo
參數對pytz
。>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 LMT+0020'
對於沒有夏令時轉換的時區,例如UTC [。],這是安全的。
兩種方法都不能應用於time()
對象; 而是將其應用於datetime
對象:
dateTimeA = departure_time.tzinfo.localize(
datetime.combine(date.today(), departure_time, tzinfo=None))
dateTimeB = arrival_time.tzinfo.localize(
datetime.combine(date.today(), arrival_time, tzinfo=None))
上述重新使用tzinfo
的對參考departure_time
時間對象,並且設置tzinfo
到None
,明確地,以產生正確的時區偏移。
經過這些更改,輸出將變為:
2018-02-20 10:29:00-04:00
2018-02-20 10:29:00-05:00
1:00:00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.