2010-04-14 20 views

Odpowiedz

6

Twoja odpowiedź brzmi: tak długo, jak czas_ startowy i czas_końcowy nie mają przypisanej klasy tzinfo. Nie można bezpośrednio porównać naiwnej datetime z timezoned-datetime.

2

można użyć proste jeśli porównując trzy daty, jak to

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

wiem stary, ale ponieważ to jest tak wysoko w wynikach Google, odpowiedzi tutaj nie biorą pod uwagę dwa przypadki:

  1. Jeśli czas jest równy albo swoim przedziale, tj Twój zakres wynosi 6-8 i jest 6.
  2. Jeśli zakres czasu jest powiedzieć od 18:00 do 6:00, prawidłowy zakres; jednak 19:00 nie będzie pasować.

Napisałem funkcję, która zajmuje się porównywaniem czasu, mam nadzieję, że pomoże to każdemu, kto ogląda to stare pytanie.

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

Czas testowania wszystkich potrzebnych naiwnych (bez strefy czasowej) lub wszystkich świadomy (strefa czasowa). Wyjątek powinien wystąpić, jeśli spróbujesz porównać świadomość i naiwność. Jeśli wszystkie czasy są świadome, strefy czasowe nie muszą w rzeczywistości odpowiadać tym, co wydaje się być brane pod uwagę przy porównywaniu.

np.

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" 
Powiązane problemy