2015-03-23 2 views
0

В моем приложении django я храню время в моей базе данных (postgresql). Сохраненное время выглядит так в DB: 2015-03-23 ​​16: 02: 12.163084 + 03. Проблема в том, что когда я получаю время, время, которое я получаю, всегда отстает на 3 часа. Как и в моем примере, дата, указанная выше, время, которое будет показано, будет отображаться 23 марта 2015 года 01:02:12. Обратите внимание на разницу во времени. Что я могу сделать для того, чтобы пользователю было показано время в соответствии с их часовым поясом?Django получить время в локальном часовом поясе

ответ

0

Поддержка часового пояса по умолчанию отключена. Чтобы включить его, установите USE_TZ = True в свой файл настроек. Установка pytz настоятельно рекомендуется, но может не быть обязательной в зависимости от конкретной базы данных, операционной системы и часового пояса. Если вы сталкиваетесь с вопросом о дате или времени запроса исключения, попробуйте установить его перед подачей ошибки. Это так же просто, как:

В settings.py

USE_TZ = True 

Тогда

sudo pip install pytz 

Когда поддержка часовых поясов включена, Django хранит информацию о дате и времени в формате UTC в базе данных, использует внутренние объекты времени и времени, связанные с временной зоной, и переводит их в часовой пояс конечного пользователя в шаблонах и формах.

Для более https://docs.djangoproject.com/en/1.7/topics/i18n/timezones/

Вы можете проверить разницу в шаблоне с помощью

{% load tz %} 

{% localtime on %} 
    {{ value }} 
{% endlocaltime %} 

{% localtime off %} 
    {{ value }} 
{% endlocaltime %} 

часового пояса FAQ поможет вам

+0

USE_TZ = True ... Я уже сделал что. Может ли проблема заключаться в том, что я на самом деле JSON, кодирующий результаты запроса и выполняющий с ней другие функции, а не на самом деле помещая результат запроса в контекст шаблона? – Denny

0

Попробуйте так:

from django.utils import timezone 
from tzlocal import get_localzone # pip install tzlocal 

local_tz = get_localzone() 
timezone.activate(local_tz) 
timezone.localtime(timezone.now()) 
0

Я, наконец, понял. Поскольку я создавал JSON на стороне сервера для таблиц данных, я просто решил вернуть время в UTC для стартеров. Затем, на переднем конце, когда я инициализировать таблицы данных, я локализовать время, используя moment.js как:

"aoColumnDefs":[ 
        { 
         "aTargets": [3, 4], //Columns containing UTC time 
         "mRender": function(data, type, full){ 
          if(data){ 
           var mDate = moment(data); 
           return (mDate && mDate.isValid()) ? mDate.format("L LT") : ""; 
          } 
          return ""; 
         } 
        } 
       ] 

Это отлично работает :-)

Смежные вопросы