Работа с UTC и текущим часовым поясом

0

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

Поэтому я работаю над некоторыми проблемами DateTime, так как вы можете имитировать.

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

Чтобы избежать каких-либо проблем с DateTime и попытаться упростить работу с часовыми поясами, я сохраняю DateTime в базе данных в формате UTC.

from DateTime import DateTime

# inside a class of my entity
self.start_date = datetime.utcnow()

Это работает нормально, проблема в том, когда я пытаюсь преобразовать дату назад.

Например.

Если мое приложение работает в стране с GMT -1, когда пользователь просит сохранить объект и его значение в базе данных (с использованием UTC now()), DateTime станет 2016-07 -1 3 16:00:00.

Но когда я пытаюсь вернуть значение, у меня есть два сценария:

  1. Если я ничего не сделаю, я получу DateTime, как в базе данных, "2016-07 -1 3 14:00:00"
  2. Если я попытаюсь преобразовать в локальный часовой пояс, я получаю как 2016-07 -1 3 17:00:00. Время было увеличено на 1, а снижение не ожидалось.

Я пытаюсь использовать библиотеку momentjs для работы с датами, но ничего не работает.

Мне интересно, нужно ли делать GMT, например (-01: 00), а затем выполнить некоторую математику с DateTime, которая поступает из базы данных, например, sub или sum разница в часах GMT.

  • 0
    Обычно вы используете timestamp with timezone в базе данных и значение назначения с now() , а затем вы select timestamp_column at time zone 'your_zone'
  • 0
    Да, я использую **timestamp** in the database . Я использую utcnow() чтобы избежать utcnow() с utcnow() в базе данных. Теперь мне нужно преобразовать это значение после получения его из базы данных. select timestamp_column at time zone 'your_zone' - не вариант в моем случае.
Показать ещё 2 комментария
Теги:
datetime
python-2.7
momentjs

1 ответ

0
Лучший ответ

Решение:

Мое решение для этого было, хранить все как UTC в моей базе данных.

Получите время datetime как UTC и скрытое для часового пояса браузеров с помощью библиотеки timejs.

Делать так.

moment.tz(moment.utc(datetime), moment.tz.guess());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню