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

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

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

Это вызывает ошибку типа.

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

Разместите, пожалуйста, списки передовых методов работы с датой и временем.

datetime.now() (или другое местное время, заданное как объект datetime наивный) может давать сбой при переходах на летнее время или изменениях смещения UTC для местного часового пояса по другим причинам. Вместо этого следует использовать время в формате UTC или объект даты и времени, например datetime.utcnow() или datetime.now(timezone.utc).astimezone().

jfs 24.10.2014 08:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
62
1
65 834
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вы можете вычесть два объекта дата и время, чтобы найти разницу между ними. Вы можете использовать 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 день, он будет неточным.

Ryan White 25.09.2008 04:39

все, что вам нужно сделать, это сравнить его с другим значением timedelta вместо атрибута секунд.

Jeremy Cantrell 25.09.2008 05:18

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

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

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

Стоит отметить, что total_seconds () доступен начиная с Python 2.7.

szymond 03.06.2012 21:30

Другие вопросы по теме