При сохранении следующей модели время начала и времени запуска сохраняется на один час меньше, чем у меня по местному времени. Я установил USE_TZ = True
и TIME_ZONE = "Europe/Madrid"
. Я полагаю, что этот час меньше, потому что он относится к UTC (на час меньше, чем Европа/Мадрид). MySQL также хранит неверное время. Тем не менее, мне нужно отобразить правильное дата-время на моем веб-сайте. Дата-время правильное в администраторе, но не в остальной части приложения.Один час меньше при сохранении django datetimefield
Я попытался несколькими способами реализовать дату и время, но я не могу его получить. Это мой фактический код, присвоенный в поле запуска:
pytz.timezone("Europe/Madrid").localize(datetime.datetime.now()).strftime("%Y-%m-%dT%H:%M:%S")
Когда я исполняю предыдущую команду, я получаю правильную дату с print
, но при сохранении, она хранится в один час меньше. Зачем?
Это моя модель:
class Event(models.Model):
title = models.CharField(max_length=40)
start = models.DateTimeField(null=True,blank=True)
end = models.DateTimeField(null=True,blank=True)
allday = models.BooleanField(default=False)
user = models.ForeignKey(User)
Edit-1:
на основе AJAX вызова:
$.ajax({
type: "GET",
url: "/projects/{{project.id}}/get_events/",
dataType: "json",
success: function(response){
data = eval("(" + response + ")")
var events = [];
for(i=0;i<data.length;i++){
events.push({
id: data[i].pk,
title: data[i].fields['title'],
start: data[i].fields['start'],
end: data[i].fields['end'],
className: "event",
defaultTimedEventDuration: "00:30:00"
});
}
}
});
Вы прочитали [документацию по часовому поясу] (https://docs.djangoproject.com/en/dev/topics/i18n/timezones/)? Время datetime хранится в формате UTC, так как в UTC хранятся данные о времени * всегда *. Тем не менее часовой пояс, отображаемый для пользователя, основан на текущем часовом поясе, который по умолчанию является часовым поясом TIME_ZONE. Вот почему вы получаете правильное значение в админе. Пожалуйста, определите «остальную часть приложения», поэтому ясно, где именно вы получаете неправильное значение. –
С «остальной частью приложения» я имею в виду веб-сайт. У меня есть плагин календаря, и каждое отображаемое в нем событие имеет на один час меньше (время и время UTC). Как я могу ссылаться на местное время или текущий часовой пояс, а не на дату, хранящееся в UTC? – DavidRguez
Я получаю все события календаря с помощью вызова AJAX, запрашивая события с помощью простого «events = Event.objects.filter (user = user)» и сериализации их данных = serializers.serialize («json», события) ». Я помещаю вызов AJAX в раздел редактирования сообщения. – DavidRguez