2012-08-10 8 views
9

मेरे पास मेरी मॉडलों में से एक में निम्न कोड:एक Django datetime पर strftime का उपयोग स्ट्रिंग में एक UTC समय पैदा करता

def shortDescription(self): 
    return self.name + ' ' + self.class_date.strftime("%I:%M") 

self.class_date है एक समय क्षेत्र के बारे में पता DateTimeField, self.class_date.is_aware() सच है, USE_TZ सही है।

शॉर्टडिस्क्रिप्शन एक स्ट्रिंग देता है जो डिफ़ॉल्ट टाइमज़ोन की बजाय यूटीसी में समय देता है, टेम्पलेट में {{aclass.class_date}} डालने से सही क्षेत्र में समय प्रदर्शित होता है।

क्या कभी-कभी बेस, बेवकूफ समय पर काम कर रहा है? या यहाँ और क्या चल रहा है?

+0

तुम क्या करते "टाइमज़ोन जागरूक तारीख" से मतलब है? यह किस वर्ग है? –

उत्तर

29

जब आप सीधे %I या %M जैसे डेटाटाइम के टुकड़ों का संदर्भ देते हैं, तो यह सीधे इसका उपयोग करता है क्योंकि यह कोई लोकेल रूपांतरण नहीं है। यदि आपने %Z शामिल किया है तो आप देखेंगे कि समय UTC में है। यदि आप लोकेल-जागरूक परिणाम चाहते हैं, तो आपको अधिक सीमित %X का उपयोग करने की आवश्यकता है, जो लोकेल के लिए पूर्णकालिक रूप से परिवर्तित हो जाएगा।

आप अधिक की जरूरत है, तो आप इसे परिवर्तित करना होगा:

from django.utils import timezone 

def shortDescription(self): 
    class_date = timezone.localtime(self.class_date) 
    return self.name + ' ' + class_date.strftime("%I:%M") 

या, आप date फिल्टर है, जो अपने आप आपके लिए ऐसा करता है पर भरोसा कर सकते हैं:

from django.template import defaultfilters 

def shortDescription(self): 
    return self.name + ' ' + defaultfilters.date(self.class_date, 'g:i') 
+0

उत्कृष्ट। और मुझे डिफॉल्टफिल्टर के बारे में पता नहीं था। –

+1

हाँ, मैं इसे हर समय उपयोग करता हूं। Django टेम्पलेट फ़िल्टर केवल नियमित तरीके हैं, इसलिए आप अपने कोड में कहीं भी किसी भी का उपयोग कर सकते हैं। 'defaultfilters.slugify' भी अक्सर काम में आता है। –

+0

बिल्कुल सही .......... –

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