2010-05-13 56 views
5

我想兩個日期之間的計算差值(單位:秒)/時間格式如下:如何找到Python中不同時區的時間差異?

2010-05-11 17點07分33秒UTC

2010-05-11 17點07分33秒EDT

time1 = '2010-05-11 17:07:33 UTC' 
time2 = '2010-05-11 17:07:33 EDT' 
delta = time.mktime(time.strptime(time1,"%Y-%m-%d %H:%M:%S %Z"))-\ 
     time.mktime(time.strptime(time2, "%Y-%m-%d %H:%M:%S %Z")) 

我的問題是EDT無法識別,特定錯誤是

ValueError: time data '2010-05-11 17:07:33 EDT' does not match format '%Y-%m-%d %H:%M:%S %Z' 
+2

您是否在尋找這個http://labix.org/python-dateutil?它可能比你在做的任何事都更簡單。 – 2010-05-13 15:54:09

+0

感謝您的答案。 但即使通過使用pytz,我仍然無法找出解析字符串'EDT'等並將其轉換爲pytz obj的更好方法時區可以是任何3-4字母字符串縮寫,但pytz使用'US/Eastern' 。 我是否需要建立一個映射將縮寫轉換爲'US/Eastern'格式?這聽起來對我來說太過分了。 謝謝, – JasonA 2010-05-13 16:46:04

+1

我最終建設有條目的文本文件中像下面: << EDT \t東部夏令時間(北美)\t UTC-04 >> 然後使用字符串搜索入口「EDT」從時間字符串獲得 通過使用文件中的值-04,我可以使用mktime()以秒爲單位獲取時間差。 我仍然認爲應該有一個更簡單的方法來做到這一點... 謝謝, – JasonA 2010-05-13 18:47:59

回答

8

退房的pytz世界時區定義庫。

該庫允許使用Python 2.3或更高版本進行精確的跨平臺時區計算。它還解決了夏令時結束時模糊不清的問題,您可以在Python Library Reference(datetime.tzinfo)中閱讀更多信息。

它採用tz database,其中應包括EDT的優勢,並讓你執行你需要(也可能更可靠&準確地比你當前實現)的計算。

+1

+1因爲'pytz'是蜜蜂的膝蓋。 – jathanism 2010-05-13 18:40:18

0

從文檔爲strptime

支持的%Z指令是基於 包含在TZNAME的價值觀和 日光是否爲真。由於 這是它是平臺特定的,除了 用於識別始終爲已知(並且被認爲是 非夏令時時區)的UTC和GMT,它們是 。

10

除了pytz,請查看python-dateutilrelativedelta功能非常出色。

這是一個使用在一起的樣本:

from datetime import datetime 

from dateutil.relativedelta import * 
import pytz 

if __name__ == '__main__': 
    date_one = datetime.now(pytz.timezone('US/Eastern')) 
    date_two = datetime.now(pytz.timezone('US/Mountain')) 
    rdelta = relativedelta(date_one, date_two) 
    print(rdelta) 
+0

這是錯誤的... relativedelta不考慮時區。我只是試了一下,這給了我2個倫敦和巴黎之間的差異(2secs =我需要鍵入函數的時間) – dgan 2017-11-15 10:15:39