Django конвертирует временную метку перед выполнением запроса?

У меня есть уникальный случай, когда моя внешняя временная метка генерируется на основе пользовательских настроек. (Пользователь может выбрать свой таймзону, 12/24-часовые часы).

У меня есть функция поиска, в которой пользователь может искать по временной метке.

Проблема, с которой я столкнулся, заключается в том, что моя временная метка в базе данных - это временная метка UTC, но пользователь хочет осуществлять поиск на основе визуальной временной метки, которую он видит на странице.

Например, на front-end моего приложения метка времени показывает...

2022-09-21 8:25:26 a.m.

На стороне postgres эта временная метка будет отображаться как...

datetime.datetime(2022, 9, 21, 12, 25, 26, 959035, tzinfo=datetime.timezone.utc)

Когда пользователь набирает 09-21, как и ожидалось, возвращаются нулевые результаты.

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

Вот этот поток. Я предполагаю, что ваша внешняя дата будет вводиться в строковой форме. Поэтому вам нужно преобразовать его в объект DateTime, а затем преобразовать его часовой пояс в UTC. Используйте это значение для фильтрации из DB. Получите данные и если вы отображаете значение DateTime в ответе, то вы должны преобразовать его обратно в часовой пояс пользователя. обмен кусками кода поможет.

Преобразуйте ваше строковое значение внешнего интерфейса в DateTime obj:

input_time = datetime.datetime.strptime(yourinput, "%d/%m/%Y %H:%M")

перевести в нужную вам зону из UTC:

from_zone = tz.gettz("UTC")
to_zone = tz.gettz(timezone_info)("your required zone")
utctime = input_time.replace(tzinfo=from_zone)
new_time = utctime.astimezone(to_zone)

используйте это new_time в запросе для получения данных, если в результате отображается дата после результата запроса преобразуйте его обратно в нужную зону и сделайте его в строковом формате, как это.

time_format = "%d/%m/%Y %H:%M"
new_time = new_time.strftime(time_format)

Убедитесь, что импортированы необходимые библиотеки

Вернуться на верх