2015-10-21 2 views
1

Я работаю на сайте, основанном на Django. Я пытаюсь получить правильный часовой пояс и время для отображения. Но он работает неправильно. Я живу в Далласе, штат Техас. Поэтому мой часовой пояс по умолчанию - «Америка/Чикаго».Часовой пояс Python-Django работает некорректно

В файле settings.py содержатся следующие строки кода.

TIME_ZONE = 'UTC' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

У меня есть дата и время установки. Поэтому, когда я пытаюсь сэкономить время в базе данных, мои коды,

from datetime import datetime 
import pytz 

utc = pytz.utc 

database = Database.objects.get(id=1) 

databas.time = utc.localize(datetime.now()) 

database.save() 

поэтому, когда я проверить в базе данных, обновляется время 2015-10-20 23:13:04

вместо 2015-10-20 18:13:04

и когда я распечатать его в шаблоне по кодам ниже, я получаю этот выход Oct. 20, 2015, 1:13 p.m.

{{ database.time|localtime }} 

Я смущен, как использовать DateTime, pytz и чтобы получить точное время вместе с файлом settings.py.

Что я хочу сделать, это сохранить время UTC. Но когда я распечатываю, я хочу получить часовой пояс посетителя и время печати в соответствии с пользователем. На данный момент мой сайт будет доступен только в Соединенных Штатах. Моя модель имеет

time = models.DateTimeField(auto_now_add=True) 

и это экономит некоторое время. У меня есть другая модель, в которой у меня есть столбец с именем истекает время, когда я использую следующие коды для сохранения,

expire_time = utc.localize(datetime.now()+ timedelta(hours=24)) 

означает, что я хочу, чтобы истечь связь после 24 часов. Но этот часовой пояс меня смущает. Может кто-нибудь мне помочь? Я не знаю, что я должен использовать в своих кодах, чтобы получить правильный часовой пояс.

ответ

4

Если вы установили USE_TZ = True магазины Django в UTC. Используйте следующие действия для создания часового пояса осведомленного datetime.now:

from django.utils import timezone 
from datetime import timedelta 

database.time = timezone.now() 
expire_time = timezone.now() + timedelta(hours=24) 

Вы можете использовать activate(), чтобы установить часовой пояс для фактического часового пояса конечного пользователя. Посмотрите пример, как пользователь может выбрать свой часовой пояс и как этот выбор используется для активации своего часового пояса.

+0

Так что должны мои settings.py коды? Правильны ли они? И, как я уже сказал, 'models.DateTimeField (auto_now_add = True)' не сохраняет время UTC. Я не знаю почему. –

+0

Да, ваши настройки выглядят хорошо. Можете ли вы отправить значение своего поля «время» после создания нового экземпляра? –

+0

Нет кода для времени. Я не сохраняю время по умолчанию. Я обновляю время истечения срока действия. –

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