Python中的分钟日期差异

Hul*_*ulk 58 python datetime

如何计算Python中以下时间戳的时间差(以分钟为单位)?

2010-01-01 17:31:22
2010-01-03 17:31:22
Run Code Online (Sandbox Code Playgroud)

Ken*_*ane 98

如果日期的确切时间不同,则RSabet的答案不起作用.

原始问题:

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

daysDiff = (d2-d1).days
print daysDiff
> 2

# Convert days to minutes
minutesDiff = daysDiff * 24 * 60

print minutesDiff
> 2880
Run Code Online (Sandbox Code Playgroud)

d2-d1为您提供datetime.timedelta,当您使用天数时,它只会显示timedelta中的天数.在这种情况下它工作正常,但如果你有以下.

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 16:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

daysDiff = (d2-d1).days
print daysDiff
> 2

# Convert days to minutes
minutesDiff = daysDiff * 24 * 60

print minutesDiff
> 2880  # that is wrong
Run Code Online (Sandbox Code Playgroud)

它仍然会给你相同的答案,因为它仍然会返回2天; 它忽略了timedelta的小时,分​​钟和秒.

更好的方法是将日期转换为通用格式,然后进行计算.最简单的方法是将它们转换为Unix时间戳.这是执行此操作的代码.

from datetime import datetime
import time

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

# Convert to Unix timestamp
d1_ts = time.mktime(d1.timetuple())
d2_ts = time.mktime(d2.timetuple())

# They are now in seconds, subtract and then divide by 60 to get minutes.
print int(d2_ts-d1_ts) / 60
> 3043  # Much better
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这非常有帮助。老实说,datetime 不是一个非常用户友好的模块 (2认同)

Eva*_*ans 78

minutes_diff = (datetime_end - datetime_start).total_seconds() / 60.0
Run Code Online (Sandbox Code Playgroud)

  • 伟大而简单的答案;我要补充一点,这假设`datetime_end` 和`datetime_start` 已经被解析为`datetime` 对象。减法产生一个`timedelta`实例。 (5认同)

小智 18

如果有人没有意识到这一点,一种方法是将Christophe和RSabet的答案结合起来:

from datetime import datetime
import time

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

diff = d2 -d1
diff_minutes = (diff.days * 24 * 60) + (diff.seconds/60)

print(diff_minutes)
> 3043
Run Code Online (Sandbox Code Playgroud)


小智 8

要使用不同的时间日期进行计算:

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 16:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

diff = d2-d1
diff_minutes = diff.seconds/60
Run Code Online (Sandbox Code Playgroud)

  • 这种方法是不正确的,它忽略了天数的差异。 (14认同)

unw*_*ind 5

使用datetime.strptime()解析成日期时间实例,然后计算差异,并最终转换成相差几分钟.


RSa*_*bet -46

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

print (d2-d1).days * 24 * 60
Run Code Online (Sandbox Code Playgroud)

  • 仅当两次恰好在同一秒(不同的日子)时,此答案才有效 (7认同)