2009-12-02 32 views
51

¿Cómo puedo comparar los tiempos en python?Python comparación de tiempo

Veo que las comparaciones de fechas se pueden hacer y también hay "timedelta", pero estoy luchando para averiguar cómo comprobar si la hora actual (de datetime.now()) es anterior, igual o posterior que un tiempo especificado (por ejemplo, 8 a.m.) independientemente de la fecha.

Respuesta

78

Usted no se puede comparar un punto específico en el tiempo (por ejemplo, como "en este momento") contra un evento recurrente no fijo (8 a.m. ocurre todos los días).

Puede comprobar si ahora es antes o después de 08 a.m. de hoy:

>>> 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 
+3

Es posible que desee voltear la aceptación de la respuesta de Pär Wieslander (y por lo general deben esperar unos minutos más de lo que hizo: P), ya que es un poco más específico a exactamente lo que usted pidió. –

1

fecha y hora tienen la capacidad de comparación

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

Es posible comparar directamente los objetos datetime.datetime

como son:

>>> 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 
>>> 
44

Usted puede utilizar el método de datetime objetos time() para obtener la hora del día, que se puede utilizar para la comparación sin tener la fecha en cuenta:

>>> 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 
+14

+1. También se puede hacer 'now.time()

+1

Asegúrate de hacer 'datetime.datetime.now(). Time()', no olvides los corchetes en 'now()'! –

4

Inspirado por Roger Pate:

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" 
1

Otra forma de hacerlo sin agregar dependencias o usar datetime es simplemente hacer algunos cálculos sobre los atributos del objeto de tiempo. Tiene horas, minutos, segundos, milisegundos y una zona horaria. Para comparaciones muy simples, las horas y los minutos deberían ser suficientes.

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

No recomiendo hacerlo a menos que tenga un caso de uso increíblemente simple. Para cualquier cosa que requiera conocimiento de la zona horaria o conocimiento de las fechas, debe usar datetime.

Cuestiones relacionadas