Ich entwickle eine Django App zum Loggen von Tauchgängen und jeder Tauchgang hat eine Datums- und eine Zeitzone. Ich verwende die Django-Zeitzonen-App für die Zeitzone.Zeige eine Zeit mit einer bestimmten Zeitzone in Django
class Dive(models.Model):
...
date_time_in = models.DateTimeField(default=timezone.now)
timezone = TimeZoneField(default=timezone.get_current_timezone_name())
So ist der Benutzer in der Lage, eine Datetime-Zeichenfolge („2016.07.11 14.00 Uhr“) und wählen Sie eine Zeitzone („Asien/Bangkok“ - UTC + 0700) einzugeben, habe ich dann die Zeitzone der Datetime zu dem in meiner Sicht wie folgt gegeben:
def log_dive(request):
if request.method == 'POST':
form = DiveForm(request.POST)
if form.is_valid():
dive = form.save(commit=False)
date = dive.date_time_in
date = date.replace(tzinfo=None)
dive.date_time_in = dive.timezone.localize(date)
dive.save()
die Datenbank dann die Datetime als UTC in der Datenbank speichert (SELECT-Anweisung gibt es in meiner lokalen Zeitzone):
# SELECT date_time_in, timezone FROM divelog_dive ORDER BY number DESC;
date_time_in | timezone
------------------------+------------------
2014-07-11 17:00:00+10 | Asia/Bangkok
Jetzt Es gibt zwei Dinge, mit denen ich zu kämpfen habe i:
1) Ich möchte die Daten in der gegebenen Zeitzone anzeigen, aber ich kann nicht scheinen, sie zu stoppen, die zu der Einstellung TIME_ZONE vorgeht.
2) Wenn der Benutzer den Datensatz bearbeitet, sollte die Zeit, die im Eingabefeld angezeigt wird, die ursprünglich eingegebene sein (14:00), stattdessen wird sie in der aktuellen Zeitzone (17:00) angezeigt.
Danke für Ihre Hilfe Chris, ich habe es jetzt herausgefunden, der Code I ist zum Speichern des Datetime korrekt geschrieben, die Zeile nach 'ersetzen (Tzinfo = None)' setzt die Zeitzone auf die vom Benutzer gewählte Zeitzone (dive.timezone ist das pytz timezone-Objekt). – xeonman9000