63

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

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

这会产生类型错误。

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

请发布日期时间最佳实践列表。

4

7 回答 7

110

使用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)
于 2008-09-24T23:44:27.837 回答
5

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

if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
    print 'older'
于 2008-09-24T23:42:01.757 回答
5

选择:

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

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

于 2012-05-11T06:14:38.880 回答
1

您可以使用返回对象的 '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
于 2008-09-24T23:40:43.400 回答
0

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

于 2008-09-24T23:35:26.547 回答
0

像这样:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
于 2008-09-24T23:45:28.240 回答
0

将您的时间增量转换为秒,然后使用转换回经过的小时数和剩余分钟数。

start_time=datetime(
   year=2021,
   month=5,
   day=27,
   hour=10,
   minute=24,
   microsecond=0)

 end_time=datetime.now()
 delta=(end_time-start_time)

 seconds_in_day = 24 * 60 * 60
 seconds_in_hour= 1 * 60 * 60

 elapsed_seconds=delta.days * seconds_in_day + delta.seconds

 hours=  int(elapsed_seconds/seconds_in_hour)
 minutes= int((elapsed_seconds - (hours*seconds_in_hour))/60)

 print("Hours {} Minutes {}".format(hours,minutes))
于 2021-05-27T17:30:49.353 回答