我今天有一个简单的问题。我想得到两个日期之间的差异,并检查差异是否在约5分钟左右。
我发现了一个获取差异的问题。
我将同一个日期与相差几分钟的日期进行了比较,结果显示相差-1天?这对我来说没有意义。
如果你愿意的话,自己测试一下。
比较日期:
Date1: 2021-05-15 00:38:57.244000
Date2: 2021-05-15 02:40:42.245693
打印的差异为:
Diff: -1 day, 21:58:14.998307
为什么是-1天?差别不应该只有2个小时吗?那么,最好的方法是什么来获得这两个日期之间的差异正如我所说,我想检查差值是否小于(或等于(5分钟如果日期每次都不同,那怎么可能呢?
重要信息:日期总是不同的,因为我检查了帐户创建日期。
我用这个代码来改变:
diff = date1 - date2
这个问题可以通过对两个日期对象进行排序来解决,这样diff比较总是返回一个正数。然后,您可以使用timedelta对象来检查差异是否小于5分钟。
from datetime import datetime, timedelta
# Define dates as datetime objects
Date1 = datetime.fromisoformat("2021-05-15 00:38:57.244000")
Date2 = datetime.fromisoformat("2021-05-15 02:40:42.245693")
# Define 5 minutes as a timedelta object
five_minute_duration = timedelta(minutes=5)
通过从新日期中减去旧日期来比较这两个日期。结果将是一个timedelta对象。
diff = Date2 - Date1
如果你不确定哪个约会对象是年长的和年轻的,你可以对它们进行排序。这将使比较稳定,并防止出现意外的负时间增量。
dates_sorted = sorted([Date2, Date1])
diff = dates_sorted[1] - dates_sorted[0]
小时差异。在本例中,持续时间为2.029…小时。
diff.total_seconds() / (60 * 60)
检查差异是否小于或等于5分钟的持续时间。
if diff <= five_minute_duration:
print("Yes")
else:
print("No")
您可以先进行比较运算,然后再进行减法运算。示例如下所示。
from datetime import datetime
dt1 = datetime(2020, 4, 19, 12, 20)
dt2 = datetime(2020, 4, 21, 15, 2)
def get_date_diff(date1, date2):
diff = date2 - date1 if date1 < date2 else date1 - date2
return diff
def test():
print (get_date_diff(dt1, dt2))
test()
通过为允许的差异创建两个具有正值和负值的时间增量来创建上限和下限
lower = timedelta(minutes=-5)
upper = timedelta(minutes=5)
然后检查日期时间之间的差异是否在的范围内
lower < date1 - date2 < upper
这种方法的优点是,如果进行多次比较,lower
和upper
可以只创建一次,并且不必执行日期时间的排序