Сравнение даты на Python

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

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

Это генерирует ошибку типа.

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

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

Ответ 1

Используйте класс 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)

Ответ 2

Сравните разницу с timedelta, которую вы создаете:

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

Ответ 3

Альтернатива:

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

Предполагая, что self.timestamp является экземпляром datetime

Ответ 4

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

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

Ответ 5

Вы можете вычесть два datetime, чтобы найти разницу между ними.
Вы можете использовать datetime.fromtimestamp для разбора метки времени POSIX.

Ответ 6

Так же:

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