Как установить нужный timezone для datetime?

В базе хранятся данные с полем timestamp - там unix-time с UTC+0.

Нужно, выбрать данные временной промежуток, указываемый пользователем, причем он может выбрать свою временную зону в GMT.

К примеру, если нам нужно за сегодня в UTC+0, мы берем промежуток:
от
time.mktime(date.today().timetuple())
до
time.mktime(datetime.now().timetuple())

А как еще сделать поправку на временные зоны&
  • Вопрос задан
  • 27429 просмотров
Пригласить эксперта
Ответы на вопрос 2
ur001
@ur001
Программист. Искатель. Сноб. Социальный ассоциатор
Для получения текущего времени с временной зоной (локализованное время) нужно использовать now() не из datetime, а из django.utils.timezone:

from django.utils.timezone import now

Чтобы преобразовать уже локализованный datetime в другую временную зону (например во временную зону пользователя):

from django.utils.timezone import now, pytz
user_timezone = pytz.timezone(user.timezone or settings.TIME_ZONE)
now().astimezone(user_timezone)

Если у вас нелокализованный datetime и вы хотите добавить ему информацию о временной зоне:

from datetime import datetime
from django.utils.timezone import pytz
user_timezone = pytz.timezone(user.timezone or settings.TIME_ZONE)
user_timezone.localize(now())

Для того, чтобы Djagno использовало временные зоны для полей Date/Datetime нужно, они должны быть включены в настройках:

TIME_ZONE = 'Europe/Moscow'
USE_TZ = True
Ответ написан
Комментировать
создать перечень временных зон. Типа Pacific/fiji. Что пользователь мог выбрать свою временную зону и она записалась к нему в док. Далее при выводе даты и времени нужно использовать модель либо функцию с переводом времени которое он выбрал в время сервера и наоборот. Нужно одно заметить что все данные что бы писались во времени сервера, тобишь если пользователь с какой то временной зоной вводит дату например звонка, то что бы эта дата писалась не в его дате а в дате сервера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы