【问题标题】:How do I find difference between times in different timezones in Python?如何在 Python 中找到不同时区的时间差异?
【发布时间】:2011-02-19 04:00:14
【问题描述】:

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

2010-05-11 17:07:33 UTC

2010-05-11 17:07:33 美国东部时间

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'

【问题讨论】:

  • 您在寻找这个labix.org/python-dateutil 吗?它可能比你正在做的任何事情都简单。
  • 感谢您的回答。但即使使用 pytz,我仍然无法找到更好的方法来解析字符串“EDT”等并将其转换为 pytz 的 obj,时区可以是任何 3-4 个字母的字符串缩写,但 pytz 使用“US/Eastern”。我是否需要构建一个映射来将缩写转换为“美国/东部”格式?这对我来说听起来太多了。谢谢,
  • 我最终构建了一个包含以下条目的文本文件:> 然后使用从时间字符串中获得的字符串“EDT”搜索条目通过在文件中使用值 -04,我可以使用 mktime() 来获取以秒为单位的时间差。我仍然认为应该有一个更简单的方法来做到这一点......谢谢,

标签: python datetime timezone


【解决方案1】:

查看pytz 世界时区定义库。

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

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

【讨论】:

    【解决方案2】:

    除了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)
    

    【讨论】:

    • 这是错误的...... relativedelta 不考虑时区。我刚试过,这让我在伦敦和巴黎之间有 2 秒的差异(2 秒 = 我输入函数所需的时间)
    • 不起作用,两个日期之间没有区别。
    【解决方案3】:

    来自strptime的文档

    对 %Z 指令的支持基于 在 tzname 中包含的值和 日光是否真实。因为 这个,它是特定于平台的,除了 用于识别 UTC 和 GMT 是 总是已知的(并且被认为是 非夏令时时区)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2016-08-16
      • 2022-08-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多