Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中两个不同日期之间的差异_Python - Fatal编程技术网

python中两个不同日期之间的差异

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

我想编写一个函数,用以下形式查找两个不同时间戳之间的差异:“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"},{"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)