2016-05-30 8 views
1

In meinen Modellen, ich habe ein DateTimeFieldretrive Zeitzone bewusst Datetimefield in Django

sagen
class ReturnEvent(models.Model): 
    book_title = models.CharField() 
    return_time = models.DateTimeField() 

Wenn ich die return_time abrufen gedruckt werden, zum Beispiel:

return_event = ReturnEvent.objects.get(id=1) 
print(return_event.return_time.strftime("%H:%M")) 

Ich sehe die Datetime ahnungslos Zeit wie:

2016-06-18 08:18:00+00:00

Allerdings mag ich die lokale Zeit mit strftime sehen.

2016-06-18 10:18:00+02:00

Gibt es eine schnelle Lösung für dieses?

+0

Haben Sie 'USE_TZ = true' gesetzt in' settings.py'? – C14L

Antwort

2

Wenn Sie USE_TZ = True in den Einstellungen haben, speichert Django alle Datetime-Objekte in der Datenbank als UTC und wandeln sie on the fly Ihre TIME_ZONE=XYZ von settings.py, wenn sie in den Vorlagen zu machen.

Aus diesem Grunde, wenn aus der Datenbank abgerufen, datetime Objekt ist Zeitzone bewusst, aber es hat UTC als seine Zeitzone (daher +00:00 in 2016-06-18 08:18:00+00:00). Da Sie die Zeit selbst in str konvertieren (und nicht in der Vorlage rendern), konvertiert Django sie nicht in Ihre TIME_ZONE Einstellung. Sie müssen es selbst in Ihre gewünschte TimeZone konvertieren.

Wenn Sie es an die Time-Zone von Ihrem TIME_ZONE Einstellung konvertieren möchten, können Sie tun,

from django.utils import timezone 
to_tz = timezone.get_default_timezone() 
print return_event.return_time.astimezone(to_tz).strftime("%H:%M")