Сравнение Дат На Python


Я хотел бы узнать, является ли конкретный объект python datetime старше X часов или минут. Я пытаюсь сделать что-то подобное:

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

это создает ошибку типа.

каков правильный способ сделать сравнение даты и времени в python? Я уже посмотрел на WorkingWithTime что близко, но не совсем то, что я хочу. Я предполагаю, что я просто хочу, чтобы объект datetime был представлен в секундах, чтобы я мог сделать нормальное сравнение int.

пожалуйста, опубликуйте списки лучших практик datetime.

6 61

6 ответов:

использовать 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:

предполагая самостоятельно.timestamp-это экземпляр datetime

вы можете использовать комбинацию атрибутов "дней" и "секунд" возвращаемого объекта, чтобы выяснить ответ, например:

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"