Python 减去时间并运行 if 循环

1 投票
3 回答
767 浏览
提问于 2025-04-17 08:30

我想比较两个时间,如果新的时间超过2分钟,那么这个条件就会输出结果。我可以获取当前时间,使用的是datetime.datetime.now(),但是我该怎么检查旧的时间是否少于2分钟呢?

#!/usr/bin/env python


import datetime
from time import sleep
now = datetime.datetime.now()

sleep(2)

late = datetime.datetime.now()
constant = 2
diff = late-now
if diff <= constant:
    print "True time is less than 2min"
else:
    print "Time exceeds 2 mins"

有没有什么想法?

更新:

我现在把旧的日期存成字符串保存在文件里,然后从当前时间中减去它。旧的日期格式是这样的:

2011-12-16 16:14:50.800856

所以当我这样做的时候:

now = "2011-12-16 16:14:50.838638"

sleep(2)

nnow = datetime.strptime(now, '%Y-%m-%d %H:%M:%S')

late = datetime.now()

diff = late-nnow

就出现了这个错误:

ValueError: unconverted data remains: .838638

3 个回答

1

你可以直接比较 datetime 对象。

from datetime import datetime, timedelta

ts = datetime.strptime("2011-12-16 16:14:50.838638Z", '%Y-%m-%d %H:%M:%S.%fZ')
ts += timedelta(minutes=2) # add 2 minutes

if datetime.utcnow() < ts:
   print("time is less")
else:
   print("time is more or equal")
2

这只是对更新的回答,因为sje397的回答已经很完美了。

使用这样的格式字符串可以匹配整个时间字符串:

nnow = datetime.strptime(now, '%Y-%m-%d %H:%M:%S.%f')

%f用来匹配小数点后的微秒。这是从Python 2.6开始新增的功能。

3

把两个 datetime 实例相减,会得到一个 timedelta 对象,这个对象有一个叫 total_seconds 的方法:

contant = 2 * 60
diff = late-now
if diff.total_seconds() <= constant:

撰写回答