2014-12-03 3 views
0

При сохранении следующей модели время начала и времени запуска сохраняется на один час меньше, чем у меня по местному времени. Я установил 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" 
       }); 
      } 
     } 
});  
+1

Вы прочитали [документацию по часовому поясу] (https://docs.djangoproject.com/en/dev/topics/i18n/timezones/)? Время datetime хранится в формате UTC, так как в UTC хранятся данные о времени * всегда *. Тем не менее часовой пояс, отображаемый для пользователя, основан на текущем часовом поясе, который по умолчанию является часовым поясом TIME_ZONE. Вот почему вы получаете правильное значение в админе. Пожалуйста, определите «остальную часть приложения», поэтому ясно, где именно вы получаете неправильное значение. –

+0

С «остальной частью приложения» я имею в виду веб-сайт. У меня есть плагин календаря, и каждое отображаемое в нем событие имеет на один час меньше (время и время UTC). Как я могу ссылаться на местное время или текущий часовой пояс, а не на дату, хранящееся в UTC? – DavidRguez

+0

Я получаю все события календаря с помощью вызова AJAX, запрашивая события с помощью простого «events = Event.objects.filter (user = user)» и сериализации их данных = serializers.serialize («json», события) ». Я помещаю вызов AJAX в раздел редактирования сообщения. – DavidRguez

ответ

0

Похоже, проблема была с календарным плагин (FullCalendar), и не со всем заявлением. Я понял, что у FullCalendar есть опция часового пояса, для которой установлено значение false. Установив его на «local», даты отображаются правильно на веб-сайте.

В любом случае, спасибо вам за помощь!