鉴于两个日期时间A和B以及它们的差异A - B,为什么在闰年期间B的总和与差异不等于A?

问题描述 投票:0回答:1

下面是一些用于创建示例的示例代码。

import datetime

a1 = datetime.datetime(1999, 3, 1, 2)
a2 = datetime.datetime(1999, 2, 28, 0)
b1 = datetime.datetime(2000, 3, 1, 2)
b2 = datetime.datetime(2000, 2, 28, 0)

res_a = a1 - a2 # not a leap-year
res_b = b1 - b2 # is a leap-year

print("\n>> TIME DIFFERENCE\n   ... {} minus {}\n   ... {}\n".format(a1, a2, res_a))
print(">> FUTURE TIME\n   ... {} + {}\n   ... {}\n".format(a1, res_a, a1+res_a))
print(">> TIME DIFFERENCE\n   ... {} minus {}\n   ... {}\n".format(b1, b2, res_b))
print(">> FUTURE TIME\n   ... {} + {}\n   ... {}\n".format(b1, res_b, b1+res_b))
print(">> FUTURE TIME\n   ... {} + {}\n   ... {}\n".format(a2, res_b, a2+res_b))

运行上面的代码会产生以下输出。

>> TIME DIFFERENCE
   ... 1999-03-01 02:00:00 minus 1999-02-28 00:00:00
   ... 1 day, 2:00:00

>> FUTURE TIME
   ... 1999-03-01 02:00:00 + 1 day, 2:00:00
   ... 1999-03-02 04:00:00

# *****
>> TIME DIFFERENCE
   ... 2000-03-01 02:00:00 minus 2000-02-28 00:00:00
   ... 2 days, 2:00:00

>> FUTURE TIME
   ... 2000-03-01 02:00:00 + 2 days, 2:00:00
   ... 2000-03-03 04:00:00

# *****
>> FUTURE TIME
   ... 1999-02-28 00:00:00 + 2 days, 2:00:00
   ... 1999-03-02 02:00:00

在检查闰年(第一个*****)2月28日到3月1日之间的时间时,有一个额外的一天是有意义的。但是当将这个时间差添加到原始日期(例如2月28日)时,输出是一天添加到原始日期(第二个*****)。

出于我的目的,我正在阅读时间序列数据并使用经过的小时数和相应的日期时间创建数据集。鉴于代码的行为,我不太清楚如何继续。这是模块中的错误还是与正确阅读日历的方式有关?

python-3.x datetime timedelta python-datetime leap-year
1个回答
0
投票

这是一个愚蠢的错误。

最后一个print语句应为:

print(">> FUTURE TIME\n   ... {} + {}\n   ... {}\n".format(b2, res_b, b2+res_b))

产生以下输出

>> FUTURE TIME
   ... 2000-02-28 00:00:00 + 2 days, 2:00:00
   ... 2000-03-01 02:00:00
© www.soinside.com 2019 - 2024. All rights reserved.