如何在Python中计算不同时区间的时间差?

5 投票
3 回答
6366 浏览
提问于 2025-04-15 22:40

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

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

来自strptime的文档

%Z这个指令的支持是基于tzname中的值,以及是否处于夏令时。因此,这个功能会因平台而异,除了能够识别UTC和GMT这两个时间,因为它们总是被认定为不受夏令时影响的时区。

5

除了 pytz 之外,你还可以看看 python-dateutil。里面的 relativedelta 功能非常棒。

下面是一个将它们一起使用的示例:

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)
8

你可以看看这个pytz库,它是一个关于世界时区定义的库。

这个库可以让你在使用Python 2.3或更高版本时,准确地进行跨平台的时区计算。它还解决了夏令时结束时出现的时间模糊问题,关于这个问题你可以在Python库参考文档中找到更多信息(datetime.tzinfo)。

它利用了tz数据库,这个数据库应该包括东部夏令时(EDT),并且可以让你进行所需的计算(而且可能比你现在的实现更可靠和准确)。

撰写回答