2010-04-14 11 views

Respuesta

6

Su respuesta es el camino a seguir, siempre que start_time y end_time no tengan asociada una clase tzinfo. No se puede comparar directamente un datetime ingenuo con un timezoned-datetime.

2

puede utilizar un simple si la comparación de tres fechas, como este

if date1 < yourdate < date2: 
    ...do something... 
else: 
    ...do ... 
1

Sé de edad, pero ya que este es tan alto en los resultados de Google, respuestas aquí no tienen en cuenta los dos casos:

  1. Si el tiempo es igual a cualquiera de su rango, es decir, su rango es 6-8 y es 6.
  2. Si el intervalo de tiempo es decir 18:00-06:00, rango válido; sin embargo, 19:00 no coincidiría.

Escribí una función para hacer una comparación de tiempo, espero que esto ayude a cualquiera que vea esta vieja pregunta.

def process_time(intime, start, end): 
    if start <= intime <= end: 
     return True 
    elif start > end: 
     end_day = time(hour=23, minute=59, second=59, microsecond=999999) 
     if start <= intime <= end_day: 
      return True 
     elif intime <= end: 
      return True 
    return False 
0

Las fechas probadas deben ser todas ingenuas (sin zona horaria) o todas las conscientes (zona horaria). Debe producirse una excepción si intenta comparar consciente e ingenuo. Si todas las fechas son conscientes, las zonas horarias en realidad no tienen que coincidir, lo que parece tenerse en cuenta al comparar.

p. Ej.

class RND(datetime.tzinfo): 
    """ Random timezone UTC -3 """ 

    def utcoffset(self, dt): 
     return datetime.timedelta(hours=-3) 

    def tzname(self, dt): 
     return "RND" 

    def dst(self, dt): 
     return datetime.timedelta(hours=0) 


april_fools = datetime.datetime(year=2017, month=4, day=1, hour=12, tzinfo=pytz.UTC) 

random_dt = datetime.datetime(year=2017, month=4, day=1, hour=9, tzinfo=RND()) 

random_dt == april_fools 
# True as the same time when converted back to utc. 

# Between test of 3 naive datetimes 
start_spring = datetime.datetime(year=2018, month=3, day=20) 
end_spring = datetime.datetime(year=2018, month=6, day=21) 
april_fools = datetime.datetime(year=2018, month=4, day=1) 


if start_spring < april_fools < end_spring: 
    print "April fools is in spring" 
Cuestiones relacionadas