Python中计算日期差异的分钟数

98 投票
13 回答
204146 浏览
提问于 2025-04-15 22:27

我该如何在Python中计算以下时间戳之间的分钟差呢?

2010-01-01 17:31:22
2010-01-03 17:31:22

13 个回答

111

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

d2-d1会给你一个datetime.timedelta对象,当你使用days属性时,它只会显示这个时间差中的天数。在某些情况下,这样做是没问题的,但如果你有以下情况:

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

它仍然会给你相同的结果,因为它依然返回2天;它会忽略时间差中的小时、分钟和秒。

一个更好的方法是把日期转换成一个统一的格式,然后再进行计算。最简单的方式是把它们转换成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
188

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当你按下一个按钮,程序就会做出反应。这个过程就叫做“事件处理”。

事件处理的基本思路是:程序会一直在等待某个事件发生,比如用户点击、输入文字或者其他操作。一旦这个事件发生,程序就会执行相应的代码来处理这个事件。

想象一下,你在玩一个游戏,按下“开始”按钮后,游戏就开始了。这就是事件处理的一个简单例子。程序在等待你按下按钮,一旦你按下,它就会执行开始游戏的代码。

在编程中,我们通常会使用一些特定的工具和方法来设置这些事件和对应的处理方式。这样,当事件发生时,程序就能快速反应,给用户带来良好的体验。

minutes_diff = (datetime_end - datetime_start).total_seconds() / 60.0
-46

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种时候,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。

当你在这些论坛上提问时,记得把你的问题描述清楚,包括你遇到的具体情况、错误信息,以及你尝试过的解决方法。这样,其他人才能更好地理解你的问题,并给出有效的建议。

同时,查看别人提问和回答的问题也是一个很好的学习方式。通过阅读这些内容,你可以学到很多编程技巧和解决问题的方法。

总之,技术论坛是一个互相帮助和学习的地方,利用好这些资源,可以让你的编程之路更加顺利。

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

撰写回答