2012-08-10 14 views
9

Ben benim modellerinden birini aşağıdaki kod:dizesinde bir UTC zamanı üretir

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

self.class_date bir zaman dilimi farkında DateTimeField, self.class_date.is_aware() doğru, USE_TZ doğrudur.

shortDescription, varsayılan zaman dilimi yerine UTC'de zaman kazandıran bir dize döndürür; şablona {{aclass.class_date}} ifadesi, doğru bölgedeki saati görüntüler.

Strftime her zaman üs üzerinde çalışıyor, naif zaman mı? Ya da başka neler oluyor?

+0

Ne yapın: sizin için otomatik olarak yapar date filtresi, güvenebileceğiniz,

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

Veya: Eğer çok gerekiyorsa

, bunu dönüştürmek gerekir "Zaman dilimi farkında tarih" ile demek? Hangi sınıf? –

cevap

29

%I veya %M gibi tarih bilgilerinin parçalarını doğrudan referansladığınızda, düz bir dönüştürme olmadan olduğu gibi düz kullanır. %Z'u eklediyseniz, saatin UTC olduğunu görürsünüz. Yerel olarak uyan sonuçların elde edilmesini istiyorsanız, yalnızca yerel ayar için dönüştürülen tam zamanı tükenecek daha sınırlı olan %X'u kullanmanız gerekir.

from django.template import defaultfilters 

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

Mükemmel. Ve varsayılan filtreler hakkında hiç bir şey bilmiyordum. –

+1

Evet, her zaman kullanırım. Django şablon filtreleri yalnızca normal yöntemlerdendir, bu sayede bunların herhangi bir yerinde kodunuzda kullanabilirsiniz. 'defaultfilters.slugify' da oldukça sık kullanışlı geliyor. –

+0

Mükemmel .......... –