我想知道特定的python日期时间对象是否超过X小时或分钟。我正在尝试做类似的事情:

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes

这会产生类型错误。

在python中进行日期时间比较的正确方法是什么?我已经查看了 WorkingWithTime ,这篇文章很接近,但并不完全符合我的要求。我假设我只想要以秒为单位表示的datetime对象,以便我可以进行正常的int比较。

请发布日期时间最佳做法列表。

有帮助吗?

解决方案

使用 datetime.timedelta 类:

>>> from datetime import datetime, timedelta
>>> then = datetime.now() - timedelta(hours = 2)
>>> now = datetime.now()
>>> (now - then) > timedelta(days = 1)
False
>>> (now - then) > timedelta(hours = 1)
True

你的例子可以写成:

if (datetime.now() - self.timestamp) > timedelta(seconds = 100)

if (datetime.now() - self.timestamp) > timedelta(minutes = 100)

其他提示

将差异与您创建的timedelta进行比较:

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'

替代:

if (datetime.now() - self.timestamp).total_seconds() > 100:

假设self.timestamp是一个日期时间实例

您可以结合使用返回对象的'days'和'seconds'属性来找出答案,如下所示:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.

如果您总是想要正秒数,请在答案中使用abs()。

要发现时间戳到过去的秒数,您可以像这样使用它:

if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass

您可以减去两个 datetime 对象,以找出它们之间的差异。点击 您可以使用 datetime.fromtimestamp 来解析POSIX时间戳。

像这样:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top