首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定两个日期时间A和B以及它们的差值A- B,为什么在闰年中B的和和差值不等于A?

给定两个日期时间A和B以及它们的差值A- B,为什么在闰年中B的和和差值不等于A?
EN

Stack Overflow用户
提问于 2018-03-02 19:22:39
回答 1查看 26关注 0票数 0

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

代码语言:javascript
复制
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))

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

代码语言:javascript
复制
>> 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日)相加时,输出为原始日期(second *****)的相加一天。

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

EN

回答 1

Stack Overflow用户

发布于 2018-03-03 07:12:54

这是一个愚蠢的错误。

最后一条print语句应读作

代码语言:javascript
复制
print(">> FUTURE TIME\n   ... {} + {}\n   ... {}\n".format(b2, res_b, b2+res_b))

生成以下输出

代码语言:javascript
复制
>> FUTURE TIME
   ... 2000-02-28 00:00:00 + 2 days, 2:00:00
   ... 2000-03-01 02:00:00
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49068123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档