Я будую додаток в Django, якийдозволяє кінцевому користувачеві отримувати інформацію, яка є чутливою до часу доби (з 12.00 до 12.00) у певний день. Я зберігаю цю інформацію в моїй базі даних як ціле число, що представляє секунди з півночі з кроком 30 хвилин. Я дивився на документацію часового поясу Django: https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/ і знайшов себе збентеженим в тому, чи Django автоматично використовує час кінцевих користувачів, або якщо я повинен зібрати цю інформацію і врахувати її у своїх поглядах.
Будь-яка інформація буде корисною! Дякую.
Відповіді:
3 для відповіді № 1Ні. Існують деякі пакети, де можна визначити часовий пояс на основі IP-адреси. Ви можете подивитися https://github.com/adamcharnock/django-tz-detect
1 для відповіді № 2
Django не визначає часовий пояс кінцевого користувача. Але те, що вона робить, досить розумне.
Розглянемо це:
Client | Server | UTC
time 9:00 am | time 12:00 pm | time 7:00 am
timezone UTC+2:00 | timezone UTC+5:00 |
Як бачите, сервер і клієнт знаходяться в різних часових поясах і тому мають різний локальний час.
Тепер, скажімо, клієнт робить запит на створення нового об'єкта у вашій базі даних. Цей об'єкт містить поле дати.
Як це працює?
Django спочатку займе місцевий час сервера,о 12:00. Потім він перетворить його на час UTC, віднімаючи 5 годин, що стає 7:00 ранку. І це час, який Django буде використовувати для збереження об'єкта.
А тепер, скажімо пізніше, клієнт хоче бачити, коли він створив цей об'єкт.
Час створення об'єкта 7:00 am UTC
. Щоб відобразити час створення об'єкта до вашогоклієнт, ви можете або використовувати додаток, пов'язаний Джейсон в іншій відповіді. Але я не знаходжу час пошуку з використанням IP дуже надійним, як користувач може використовувати проксі.
АБО ви можете відобразити час у UTC і скористатися JavaScript, щоб перетворити його на локальний час Клієнта.
Нарешті, при конвертації 7:00 am UTC
до часового поясу клієнта, додавши 2 години (так як це 2 години попереду UTC), клієнт побачить час створення об'єкта як 9:00 am
що вони і очікували.
Не тільки, що, якщо є інший клієнт з іншого боку Землі UTC-5:00
Часовий пояс, ви можете відобразити час об'єкта до них, віднімаючи 5 годин, які дадуть 2:00 am
. Отже, за словами цього користувача, він був доданий о 2:00 ранку.