2010-05-13 53 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