【问题标题】:pytz difference of 2 datetimes in seconds? (Different time zones)pytz 以秒为单位的 2 个日期时间的差异? (不同时区)
【发布时间】:2015-08-03 12:44:26
【问题描述】:

我有 2 个具有 2 个不同时区的日期时间对象:

datetime1 = 18:26:23,tzinfo = UTC

datetime2 = 14:30:00,tzinfo = 美国/东部

两个日期在同一天。

这两个日期时间之间应该正好相差 1 小时 3 分 37 秒,即:总相差 3817 秒。

但是,当我使用以下代码进行比较时:

time_diff = (datetime2 - datetime1).total_seconds()

time_diff 给我的值是:3576。

我在几秒钟内做错了吗?还是我没有正确使用 pytz 时区?

非常感谢。

【问题讨论】:

  • 你能把它写成一个简短但完整的程序吗?
  • 这些日期时间的日期是什么,您是如何确定时区的?以US/Eastern 开头,不带日期为您提供该时区的原始 版本(格林威治标准时间19:04:00,不是偶数小时),而不是当前 版本.如果您随后将日期打包到已经意识到错误的偏移时间中,那么您将保留错误的偏移量。

标签: python datetime pytz


【解决方案1】:

时间增量文档: https://docs.python.org/2/library/datetime.html

def make_timedelta(seconds):
        return timedelta(days=seconds // 86399, seconds=seconds % 86399)

【讨论】:

    【解决方案2】:

    这里有两种可能的情况。

    1. 您在日期时间对象上创建的时区不正确
    2. 时区正确,但您的 datetime 对象实际上并不代表您所说的时间。

    例如,无论时区如何,我看不出18:26:2314:30:00 之间的差异如何可能给您带来偶数秒数,这使得场景#2 更有可能发生。

    您能否在运行该行之前打印datetime 对象的值:

    time_diff = (datetime2 - datetime1).total_seconds()
    

    以下是一些示例代码供您参考,可为您提供预期的秒数:

    from pytz import timezone
    from datetime import datetime
    
    eastern = timezone('US/Eastern')
    utc = timezone('UTC')
    datetime1 = utc.localize(datetime(2002, 10, 27, 18, 26, 23))
    datetime2 = eastern.localize(datetime(2002, 10, 27, 14, 30, 00))
    time_diff = (datetime2 - datetime1).total_seconds()
    print(time_diff)  # prints 3817
    

    【讨论】:

    • 这并不能解决他的问题,因为他的问题几乎可以肯定是他错误地创建了 datetime 对象,并且仅仅显示完全不同的代码可以工作并没有多大帮助。
    • 我可以很容易地提供一个不起作用的例子。使用 DST 时间线 2002-07-27 或 EST 更改之前的时间(如 1890-10-27)尝试相同的操作。
    • 好点,我怀疑时区不是问题,他的 datetime 对象并不代表他认为的时间。
    • 用 1890 试试,结果与他看到的完全一样。这就是为什么我认为时区 是问题所在——或者更确切地说,他试图从这些时区创建可感知的日期时间对象的方式是问题所在。但是如果没有看到他的代码,除了模糊的猜测之外,没有办法告诉他他做错了什么。
    • 你们是绝对正确的。我创建了错误的日期时间。我的原始代码通过将时区对象传递给创建者来创建日期时间,而不是使用本地化函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2011-08-24
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多