2013-04-16 6 views
39

मेरा सर्वर लंदन में है।django का timezone.now सही समय नहीं दिखाता

मेरी settings.py में मेरे पास है:

TIME_ZONE = 'Europe/Moscow' 
USE_TZ = True 

लेकिन जब मैं यह कर:

from django.utils import timezone 

print timezone.now().hour 

यह लंदन के समय प्रिंट करता है। मुझसे क्या गलती हुई है?

अद्यतन:

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

tzinfo = <UTC>, तो शायद यह लंदन समय नहीं प्रिंट, लेकिन यूटीसी के +0 समय? वैसे भी, django कैसे मास्को समय दिखाने के लिए?

इसके अलावा, जब मैं now = timezone.now() के साथ टेम्पलेट प्रस्तुत करता हूं।

{{ now.hour }} प्रिंट, उदाहरण के लिए, 12 (लंदन समय)

{{ now|date:"G" }} प्रिंट 16 (मास्को समय)

+0

क्या आप सुनिश्चित हैं कि सही सेटिंग्स लोड की गई हैं? Django.conf आयात सेटिंग्स से 'के साथ जांचें; प्रिंट सेटिंग्स। ITME_ZONE' –

+0

@DanielHepper, यह प्रिंट करता है 'यूरोप/मॉस्को' – imkost

उत्तर

61

देखें प्रश्न # 2 "Usage" section of the Django docs में।

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

क्या आप कृपया मुझे बता सकते हैं कि auto_add_now को स्थानीय समय के रूप में कैसे सेट करें? आपका बहुत बहुत धन्यवाद! – Jacky

+8

थोड़ा देर हो चुकी है, लेकिन यह काम करना चाहिए: बनाया = मॉडल। डेटटाइमफ़िल्ल्ड (डिफ़ॉल्ट = लैम्ब्डा: टाइमज़ोन.लोकटाइम (टाइमज़ोन.now()) – jeverling

+3

@ Djeverling Django 1.7 के बाद से मॉडल डिफ़ॉल्ट में लैम्ब्डा का उपयोग नहीं करना बेहतर है (यह है माइग्रेशन द्वारा समर्थित नहीं है)। इस मामले में आपको एक फ़ंक्शन को परिभाषित करना चाहिए और फिर इसे कॉल करने योग्य के रूप में पास करना चाहिए [यहां] (http://stackoverflow.com/a/12654998) – sonderlain

संबंधित मुद्दे