簡體   English   中英

如何從不同的時區獲取python daytime.time之間的正確差異?

[英]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時間對象,並且設置tzinfoNone ,明確地,以產生正確的時區偏移。

經過這些更改,輸出將變為:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM