2012-08-10 58 views
9

我在我的車型之一下面的代碼:在Django的日期時間使用的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爲真。

shortDescription返回一個字符串,它給出UTC時間而不是默認時區,將模板中的{{aclass.class_date}}顯示在正確的區域中。

是strftime總是在基地工作,天真的時間?或者這裏還有什麼?

+0

你這是什麼意思是「時區知曉日期」?它是什麼類? – 2012-08-10 20:54:44

回答

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

非常好。而我根本不知道有關defaultfilters技巧。 – 2012-08-10 23:20:45

+1

是的,我一直在使用它。 Django模板過濾器只是常規方法,因此您可以在代碼中的任何位置使用它們中的任何一個。 'defaultfilters.slugify'也經常派上用場。 – 2012-08-13 14:31:58

+0

完美.......... – 2013-02-12 23:25:19

相關問題