Python日期比较

Python日期比较,python,datetime,Python,Datetime,我想知道特定的python datetime对象是否早于X小时或分钟。我正在尝试做类似的事情: if (datetime.now() - self.timestamp) > 100 # Where 100 is either seconds or minutes 这将生成一个类型错误 在python中进行日期时间比较的正确方法是什么?我已经看了很近的,但不是我想要的。我假设我只希望datetime对象以秒表示,这样我就可以进行正常的int比较 请发布日期时间最佳实践列表。您可以减去两个对

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

if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes
这将生成一个类型错误

在python中进行日期时间比较的正确方法是什么?我已经看了很近的,但不是我想要的。我假设我只希望datetime对象以秒表示,这样我就可以进行正常的int比较

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

您可以减去两个对象以找出它们之间的差异。

您可以使用
datetime.fromtimestamp
解析POSIX时间戳。

您可以使用返回对象的“天”和“秒”属性的组合来找出答案,如下所示:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.
if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass
如果您总是希望秒数为正数,请在答案中使用abs()

要了解时间戳过去的秒数,可以如下使用:

def seconds_difference(stamp1, stamp2):
    delta = stamp1 - stamp2
    return 24*60*60*delta.days + delta.seconds + delta.microseconds/1000000.
if seconds_difference(datetime.datetime.now(), timestamp) < 100:
     pass
if seconds\u差(datetime.datetime.now(),timestamp)<100:
通过

将差异与您创建的时间增量进行比较:

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

使用
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)

像这样:

# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
    print "object is over 100 seconds old"
备选方案:

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

假设self.timestamp是一个datetime实例

将时间增量转换为秒,然后使用转换回已用小时数和剩余分钟数

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))

我认为这行不通。timedelta的秒属性限制为1天,因此如果时间长度超过1天,则将不准确。您需要做的是将其与另一个timedelta而不是秒属性进行比较。值得一提的是,自Python 2.7以来,total_seconds()可用。
datetime.now()
(或作为原始datetime对象提供的其他本地时间)可能因其他原因在DST转换或本地时区的UTC偏移量更改时失败。应改用UTC时间或aware datetime对象,例如
datetime.utcnow()
datetime.now(timezone.UTC).astimezone()