Вопрос
Я хотел бы узнать, является ли конкретный объект python datetime старше X часов или минут.Я пытаюсь сделать что-то похожее на:
if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes
Это приводит к ошибке типа.
Как правильно сравнивать дату и время в python?Я уже посмотрел на Работа со временем это близко, но не совсем то, чего я хочу.Я предполагаю, что мне просто нужен объект 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)
Другие советы
Сравните разницу с временным интервалом, который вы создаете:
if datetime.datetime.now() - timestamp > datetime.timedelta(seconds = 5):
print 'older'
Альтернатива:
if (datetime.now() - self.timestamp).total_seconds() > 100:
Предполагая, что self.timestamp является экземпляром datetime
Вы можете использовать комбинацию атрибутов '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.fromtimestamp
чтобы проанализировать временную метку POSIX.
Вот так:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"