如何在Python中找到不同时区的时间差异?

时间:2010-05-13 15:43:58

标签: python datetime timezone

我正在尝试计算格式如下的两个日期/时间之间的差异(以秒为单位):

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'

3 个答案:

答案 0 :(得分:8)

查看pytz世界时区定义库。

  

此库允许使用Python 2.3或更高版本进行准确的跨平台时区计算。它还解决了夏令时结束时模糊时间的问题,您可以在Python库参考(datetime.tzinfo)中阅读更多信息。

它利用了tz database,它应该包括EDT,并允许您执行所需的计算(并且可能比您当前的实现更可靠和准确)。

答案 1 :(得分:8)

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)

答案 2 :(得分:0)

来自strptime的文档

  

支持%Z指令   关于tzname和中包含的值   是否日光是真的。因为   这是特定于平台的,除了   用于识别UTC和GMT   永远都知道(并且被认为是   非夏令时区。