Вопрос

Я хотел бы узнать, является ли конкретный объект 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top