/ / Чи автоматично Django визначає часовий пояс кінцевого користувача? - python, django, datetime, часовий пояс, django-views

Чи автоматично визначає Django часовий пояс кінцевого користувача? - python, django, datetime, часовий пояс, django-views

Я будую додаток в 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 ранку.