2013-04-16 9 views
39

Mein Server ist in London.django's timezone.now zeigt nicht die richtige Zeit

In meinem settings.py ich habe:

TIME_ZONE = 'Europe/Moscow' 
USE_TZ = True 

Aber wenn ich dies tun:

from django.utils import timezone 

print timezone.now().hour 

Es druckt Zeit London. Was mache ich falsch?

UPDATE:

>> timezone.now() 
datetime.datetime(2013, 4, 16, 12, 28, 52, 797923, tzinfo=<UTC>) 

tzinfo = <UTC>, vielleicht druckt es nicht London Zeit, aber UTC +0 Zeit? Wie auch immer, wie man Django Show Moskau Zeit macht?

Auch, wenn ich Vorlage mit now = timezone.now() rendern.

{{ now.hour }} druckt, zum Beispiel 12 (Londoner Zeit)

{{ now|date:"G" }} druckt 16 (Moskauer Zeit)

+0

Sind Sie sicher, dass die richtigen Einstellungen geladen sind? Überprüfen Sie mit 'aus django.conf Importeinstellungen; print settings.TIME_ZONE' –

+0

@DanielHepper, druckt 'Europe/Moscow' – imkost

Antwort

61

Siehe Frage # 2 in der "Usage" section of the Django docs.

>>> from django.utils import timezone 
>>> timezone.localtime(timezone.now()) 
+1

Können Sie mir bitte sagen, wie man auto_add_now als localtime setzt? Vielen Dank! – Jacky

+8

Ein bisschen spät, aber das sollte funktionieren: erstellt = models.DateTimeField (default = lambda: timezone.localtime (timezone.now())) – jeverling

+3

@jeverling Seit Django 1.7 ist es besser, nicht Lambda in Modellstandards verwenden (es ist nicht von Migrationen unterstützt). In diesem Fall sollten Sie eine Funktion definieren und diese dann als abrufbar übergeben. [Http://stackoverflow.com/a/12654998] – sonderlain

Verwandte Themen