Я хотел бы узнать, старше ли конкретный объект datetime в Python X часов или минут. Я пытаюсь сделать что-то подобное:
if (datetime.now() - self.timestamp) > 100
# Where 100 is either seconds or minutes
Это вызывает ошибку типа.
Как правильно проводить сравнение даты и времени в Python? Я уже смотрел на WorkingWithTime, что близко, но не совсем то, что мне нужно. Я предполагаю, что мне просто нужен объект datetime, представленный в секундах, чтобы я мог провести обычное сравнение int.
Разместите, пожалуйста, списки передовых методов работы с датой и временем.






Вы можете вычесть два объекта дата и время, чтобы найти разницу между ними.
Вы можете использовать datetime.fromtimestamp для анализа отметки времени POSIX.
Вы можете использовать комбинацию атрибутов «дни» и «секунды» возвращаемого объекта, чтобы выяснить ответ, например:
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
Сравните разницу с созданной вами временной дельтой:
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)
или же
if (datetime.now() - self.timestamp) > timedelta(minutes = 100)
Вот так:
# self.timestamp should be a datetime object
if (datetime.now() - self.timestamp).seconds > 100:
print "object is over 100 seconds old"
Я не думаю, что это работает. Атрибут секунд для timedelta docs.python.org/lib/datetime-timedelta.html ограничен 1 днем, поэтому, если ваш отрезок времени превышает 1 день, он будет неточным.
все, что вам нужно сделать, это сравнить его с другим значением timedelta вместо атрибута секунд.
Альтернатива:
if (datetime.now() - self.timestamp).total_seconds() > 100:
Предполагая, что self.timestamp является экземпляром datetime
Стоит отметить, что total_seconds () доступен начиная с Python 2.7.
datetime.now()(или другое местное время, заданное как объект datetime наивный) может давать сбой при переходах на летнее время или изменениях смещения UTC для местного часового пояса по другим причинам. Вместо этого следует использовать время в формате UTC или объект даты и времени, напримерdatetime.utcnow()илиdatetime.now(timezone.utc).astimezone().