Python / Django MySQL Datetime Handling und Zeitzone

Ich habe ein Modell namens Vote mit einem Feld date :

 date = models.DateTimeField(auto_now_add=True) 

Wenn ich ein Element hinzufüge, ist das Datum in MySQL ein UTC-Datum, aber ich lebe in UTC + 2 Zeitzone

Ich glaube, ich habe die Zeitzone korrekt in settings.py :

 TIME_ZONE = 'Europe/Paris' 

Python verwenden die richtige Zeitzone:

 >>> print datetime.datetime.now() 2013-07-03 09:05:04.474000 

MySQL auch:

 > SELECT NOW( ) 2013-07-03 09:00:48 

Ich könnte das Datum Attribut manuell eingeben, es funktioniert aber ich möchte wissen, warum auto_now_add ein falsches Datum zurückgeben, obwohl Python und MySQL die richtige Zeitzone verwenden

Vielen Dank

One Solution collect form web for “Python / Django MySQL Datetime Handling und Zeitzone”

Es ist eine komplexe Bindung zu erklären. Von Django 1.4 ,

Wenn USE_TZ False ist, ist dies die Zeitzone, in der Django alle Dateitigkeiten speichern wird. Wenn USE_TZ True ist, ist dies die Standardzeitzone, die Django verwendet, um Datensätze in Vorlagen anzuzeigen und die in Formularen eingegebenen Datenträger zu interpretieren.

Dies bezieht sich auf TIME_ZONE . Also, was ist dein USE_TZ ? Wenn Ihr USE_TZ wahr ist, dann wird Django datetime in UTC speichern und TIME_ZONE , um in Vorlagen anzuzeigen und Formulare zu interpretieren.

Dies ist, weil, wenn Sie Ihre TIME_ZONE später ändern, wenn Hosting Ihrer Website in einem anderen Territorium, ist es einfach, alle Datights von UTC zu beliebigen Zeitzonen zu konvertieren.

In Django 1.3 und früher,

Beachten Sie, dass dies die Zeitzone ist, auf die Django alle Daten / Zeiten umwandelt – nicht unbedingt die Zeitzone des Servers. Beispielsweise kann ein Server mehrere Django-betriebene Standorte bedienen, jeweils mit einer separaten Zeitzoneneinstellung.

Normalerweise setzt Django die Variable os.environ ['TZ'] auf die Zeitzone, die Sie in der TIME_ZONE-Einstellung angeben. So werden alle Ihre Ansichten und Modelle automatisch in der richtigen Zeitzone betrieben.

Aber sagt dir nicht, in welcher Zeitzone die datetime in der Datenbank gespeichert wird. Notwendigkeit, sowieso zu experimentieren (meine Vermutung ist UTC).

print datetime.datetime.now() druckt die datatime entsprechend der Zeitzone Einrichtung Ihres Server-Rechners, es sei denn, Sie haben die Python-Konsole über manage.py shell .

Gleiches gilt für MySQL-Konsole. Es zeigt die datetime in Ihrer Maschine Zeitzone anstatt, was in der Datenbank gespeichert ist, wenn ich recht habe.

  • Ist Python's time.time () zeitzonenspezifisch?
  • Holen Sie sich Zeitzone von datetime.datetime.fromtimestamp ()
  • Ändern eines Unix-Zeitstempels in eine andere Zeitzone
  • Wie drucke ich eine Python-datetime in der lokalen Zeitzone?
  • Python-Zeitzonenumwandlung
  • Gibt es einen Weg, um Gebietsschema aus Land oder Zeitzone zu bekommen?
  • Python: Zeigt die Zeit in einer anderen Zeitzone an
  • Holen Sie sich Zeitzone Abkürzung von UTC Offset
  • Javascript oder Python - Wie finde ich heraus, ob es Nacht oder Tag ist?
  • Umwandlung von Zeitzonen aus Pandas Zeitstempel
  • Python bekommt aktuelle Zeit in der rechten Zeitzone
  • Python ist die beste Programmiersprache der Welt.