Сравнение даты на 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"