Получение дат, превышающих текущее время в базе данных From Django - PullRequest
0 голосов
/ 01 августа 2020

Я изо всех сил пытаюсь понять, как работают запросы даты в Django, поскольку я храню базу данных с расписанием поездов. Я хочу получить времена, превышающие текущее время.

Запрос выглядит следующим образом, но возвращает нулевые результаты:

latestdepartures  = LatestDepartures.objects.filter(station=startstation,earliest__gte=timezone.now().astimezone(pytz.utc))

Например, в моей базе данных есть запись ниже.

введите описание изображения здесь

Когда я запускаю запрос, я получаю результаты ниже (первая строка - print (timezone.now (). Astimezone (pytz.ut c)):

2020 -08-01 15: 49: 06.610055 + 00: 00

Код, который добавляет данные в базу данных, выглядит так:

def convert_date_time(o):
    if isinstance(o, datetime):
        return o.__str__()


def updateservices(stationname,destination):
    now = datetime.now()

    # dd/mm/YY H:M:S
    datenow = now.strftime("%d/%m/%Y")
    board = DARWIN_SESH.get_station_board(stationname)
    stationdict = dict()
    stationdict['from'] = stationname
    stationdict['name'] = board.location_name
    stationdict['servicelist']=[]
    services = board.train_services

    for s in services:
        traindict = dict()
        service_details = DARWIN_SESH.get_service_details(s.service_id)
        traindict['departuretime'] = datetime.strptime(datenow + " " + service_details.std,'%m/%d/%Y %H:%M').astimezone(pytz.utc)
        traindict['callingpoints'] = []
        callingpoints = service_details.subsequent_calling_points
        for c in callingpoints:
            if c.crs == destination:
                callingpointdict = dict()
                callingpointdict['code'] = c.crs
                callingpointdict['name'] = c.location_name
                callingpointdict['arrivaltime'] = datetime.strptime(datenow + " " + c.st,'%m/%d/%Y %H:%M').astimezone(pytz.utc)
                traindict['callingpoints'].append(callingpointdict)
        if len(traindict['callingpoints']) > 0:
            stationdict['servicelist'].append(traindict)
    #For getting the minimum departure
    departures = [s['departuretime'] for s in stationdict['servicelist']]
    #Store the train departure object in the database
    stationdata = json.dumps(stationdict, default=convert_date_time)
    LatestDepartures.objects.create(
        station = stationname,
        earliest = min(departures),
        services = stationdata
    )
    return stationdata

servicedetails.std будет временем, представленным в 24-часовом формате в строковом формате, например «17:00».

Может ли кто-нибудь помочь, я не уверен, должен ли я где-то изменить формат даты или это связано с тем, как объект datetime создается путем добавления времени.

UPDATE:

Теперь дата сохраняется в другом формате как '% d /% m /% Y% H:% M':

Теперь я получаю даты больше, чем, но один раз текущее время превысило самое раннее в базе данных, запрос по-прежнему возвращает результаты. Пример вывода:

2020-08-01 17:31:21.909052+00:00
print(timezone.now().astimezone(pytz.utc))
2020-08-01 18:03:00+00:00 - Time in database 
...