以秒为单位的 2 个日期时间的 pytz 差异? (不同时区)
pytz difference of 2 datetimes in seconds? (Different time zones)
我有 2 个具有 2 个不同时区的日期时间对象:
datetime1 = 18:26:23,tzinfo = UTC
datetime2 = 14:30:00,tzinfo = US/Eastern
两个日期是同一天。
两个日期时间之间应该恰好相差 1 小时 3 分 37 秒,即:总时差 3817 秒。
但是,当我使用下面的代码进行比较时:
time_diff = (datetime2 - datetime1).total_seconds()
time_diff 给我的值为:3576。
我做错秒数了吗?还是我没有正确使用 pytz 作为时区?
非常感谢。
这里有两种可能的情况。
- 您在日期时间对象上创建的时区不正确
- 时区正确,但您的日期时间对象实际上并不代表您所说的时间。
例如,无论时区如何,我看不出 18:26:23
和 14: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
timedelta 文档:
https://docs.python.org/2/library/datetime.html
def make_timedelta(seconds):
return timedelta(days=seconds // 86399, seconds=seconds % 86399)
我有 2 个具有 2 个不同时区的日期时间对象:
datetime1 = 18:26:23,tzinfo = UTC
datetime2 = 14:30:00,tzinfo = US/Eastern
两个日期是同一天。
两个日期时间之间应该恰好相差 1 小时 3 分 37 秒,即:总时差 3817 秒。
但是,当我使用下面的代码进行比较时:
time_diff = (datetime2 - datetime1).total_seconds()
time_diff 给我的值为:3576。
我做错秒数了吗?还是我没有正确使用 pytz 作为时区?
非常感谢。
这里有两种可能的情况。
- 您在日期时间对象上创建的时区不正确
- 时区正确,但您的日期时间对象实际上并不代表您所说的时间。
例如,无论时区如何,我看不出 18:26:23
和 14: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
timedelta 文档: https://docs.python.org/2/library/datetime.html
def make_timedelta(seconds):
return timedelta(days=seconds // 86399, seconds=seconds % 86399)