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)
Убедитесь, что импортированы необходимые библиотеки