我正在尝试计算格式如下的两个日期/时间之间的差异(以秒为单位):
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'
答案 0 :(得分:8)
查看pytz世界时区定义库。
此库允许使用Python 2.3或更高版本进行准确的跨平台时区计算。它还解决了夏令时结束时模糊时间的问题,您可以在Python库参考(datetime.tzinfo)中阅读更多信息。
它利用了tz database,它应该包括EDT,并允许您执行所需的计算(并且可能比您当前的实现更可靠和准确)。
答案 1 :(得分:8)
除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)
答案 2 :(得分:0)
来自strptime的文档
支持%Z指令 关于tzname和中包含的值 是否日光是真的。因为 这是特定于平台的,除了 用于识别UTC和GMT 永远都知道(并且被认为是 非夏令时区。