python中两个不同日期之间的差异
我想编写一个函数,用以下形式查找两个不同时间戳之间的差异:“2019年10月5日,上午10:13:24”。两次之间的差异很少会超过15分钟,但有些时间可能在几天或几年之间。例如,“2017年12月31日,晚上11:58:26”和“2018年1月1日,上午00:04:56”之间的差异。我试图使用datetime和strptime,但我无法让它工作python中两个不同日期之间的差异,python,Python,我想编写一个函数,用以下形式查找两个不同时间戳之间的差异:“2019年10月5日,上午10:13:24”。两次之间的差异很少会超过15分钟,但有些时间可能在几天或几年之间。例如,“2017年12月31日,晚上11:58:26”和“2018年1月1日,上午00:04:56”之间的差异。我试图使用datetime和strptime,但我无法让它工作 a = [{"time":"October 5th 2019, 10:13:24 am"},{"tim
a = [{"time":"October 5th 2019, 10:13:24 am"},{"time":"October 5th 2019, 10:17:05 am"}]
def difference(n):
for i in range(len(n)-1):
date1 = n[i].get("time")
date2 = n[i+1].get("time")
time1 = datetime.strptime(date1, '%m /%d /%y %H:%M:%S')
time2 = datetime.strptime(date2, '%m /%d /%y %H:%M:%S')
diff = time2 - time1
return diff
2个
datetime.datetime
对象之间的差异用datetime.timedelta
表示。
从:
它只能保存天、秒和微秒。然后,您可以根据需要处理该信息。
比如说,
>>> from datetime import date
>>> d1=date(2012, 12, 4)
>>> d2=date(2015,10,9)
>>> d1-d2 # the difference will be negative(past-future)
datetime.timedelta(-1039)
>>> d2-d1 # the difference is positive (future-past)
datetime.timedelta(1039)
>>> delta=d2-d1
>>> delta.days, delta.seconds,delta.microseconds
(1039, 0, 0) # no seconds and microseconds as the difference can be shown in days only
要正确处理该数字并对其进行格式化,您可以查看堆栈溢出问题。可用于
strtime
的所有格式化字符串的表格如下所示:
请注意,它确实支持将月份指定为字符串(如“十月”)而不是数字(如“10”),但您必须使用“%B”而不是“%m”!格式化字符串与您提供的输入格式完全匹配非常重要
类似地,可以将时间指定为AM/PM而不是24小时,但需要使用“%I”和“%p”而不是“%H”
datetime.strtime
不会以“5th”这样的格式处理日期,因此您必须执行一点re.sub
来删除该部分,但一旦删除了字母,就可以使用“%d”:
datetime.strtime
绝对是一种方法。使用strtime
创建两个datetime
对象,然后只需减去它们即可得到timedelta
。你能分享你迄今为止尝试过的代码吗?什么是“无法让它工作”呢?
>>> from datetime import date
>>> d1=date(2012, 12, 4)
>>> d2=date(2015,10,9)
>>> d1-d2 # the difference will be negative(past-future)
datetime.timedelta(-1039)
>>> d2-d1 # the difference is positive (future-past)
datetime.timedelta(1039)
>>> delta=d2-d1
>>> delta.days, delta.seconds,delta.microseconds
(1039, 0, 0) # no seconds and microseconds as the difference can be shown in days only
>>> from datetime import datetime
>>> import re
>>> a = [{"time":"October 5th 2019, 10:13:24 am"},{"time":"October 5th 2019, 10:17:05 am"}]
>>> def parse_date(date: str) -> datetime:
... return datetime.strptime(
... re.sub(r" (\d+)[a-z]+ ", r" \1 ", date),
... "%B %d %Y, %I:%M:%S %p"
... )
...
>>> parse_date(a[1]["time"]) - parse_date(a[0]["time"])
datetime.timedelta(seconds=221)