Як порівняти час у Python?


98

Я бачу, що порівняння дат можна зробити, і це теж є datetime.timedelta(), але я намагаюся з’ясувати, як перевірити, чи поточний час ( datetime.datetime.now()) є раннім, пізнішим чи однаковим, ніж вказаний час (наприклад, 8 ранку), незалежно від дати.


1
Я не впевнений у тому, щоб поставити це як відповідь, але я помістив це тут як коментар: на диво, я виявив, що Python приймає порівняння як '23:23:00' > '23:59:00'або '23:23:00' > '23:09:22', як і ви б робили між двома datetime.datetime.now().strftime('%H:%M')значеннями. Це найкращий спосіб порівняння між часами? Не знаю. Це працює? Наскільки я тестував, він працював нормально. Але однозначно (і звичайно): немає шансу використовувати це з рядком datetime, який має місяць, будні.
ivanleoncz

Відповіді:


128

ти не можете порівняти конкретний момент часу (наприклад, "прямо зараз") із нефіксованою, повторюваною подією (8:00 відбувається щодня).

Ви можете перевірити, чи зараз це до або після сьогоднішньої 8 ранку:

>>> import datetime
>>> now = datetime.datetime.now()
>>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0)
>>> now < today8am
True
>>> now == today8am
False
>>> now > today8am
False

4
Можливо, ви захочете перекинути відповідь на відповідь Пєра Вісландера (і, як правило, слід почекати кілька хвилин більше, ніж ви: P), оскільки це трохи більш конкретно до того, що ви просили.

65

Ви можете використовувати time()метод datetimeоб’єктів для отримання часу доби, який ви можете використовувати для порівняння без урахування дати:

>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30)
>>> last_night = datetime.datetime(2009, 12, 1, 20, 0)
>>> this_morning.time() < last_night.time()
True

2
Обов’язково це робіть datetime.datetime.now().time(), не забувайте дужки now()!
Jose Salvatierra

10

Ви можете порівняти об'єкти datetime.datetime безпосередньо

Наприклад:

>>> a
datetime.datetime(2009, 12, 2, 10, 24, 34, 198130)
>>> b
datetime.datetime(2009, 12, 2, 10, 24, 36, 910128)
>>> a < b
True
>>> a > b
False
>>> a == a
True
>>> b == b
True
>>> 

4

Натхненний Роджером Пейтом:

import datetime
def todayAt (hr, min=0, sec=0, micros=0):
   now = datetime.datetime.now()
   return now.replace(hour=hr, minute=min, second=sec, microsecond=micros)    

# Usage demo1:
print todayAt (17), todayAt (17, 15)

# Usage demo2:    
timeNow = datetime.datetime.now()
if timeNow < todayAt (13):
   print "Too Early"

2

Інший спосіб зробити це без додавання залежностей або використання дати та часу - це просто прорахувати атрибути об’єкта часу. Він має години, хвилини, секунди, мілісекунди та часовий пояс. Для дуже простих порівнянь має бути достатньо годин і хвилин.

d = datetime.utcnow()
t = d.time()
print t.hour,t.minute,t.second

Я не рекомендую робити це, якщо у вас не є неймовірно простим варіантом використання. Для будь-чого, що вимагає знання часового поясу або знання дат, слід використовувати дату і час.


1

datetime мають можливість порівняння

>>> import datetime
>>> import time
>>> a =  datetime.datetime.now()
>>> time.sleep(2.0)
>>> b =  datetime.datetime.now()
>>> print a < b
True
>>> print a == b
False


1

Ви можете використовувати функцію Timedelta для порівняння збільшення часу.

>>> import datetime 

>>> now = datetime.datetime.now()
>>> after_10_min = now + datetime.timedelta(minutes = 10)
>>> now > after_10_min 

False

Просто поєднання цих відповідей це І Роджер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.