19

モデルの1つに次のコードがあります。

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

self.class_dateはタイムゾーンを認識しDateTimeFieldself.class_date.is_aware()TrueUSE_TZですTrue

shortDescriptionは、デフォルトのタイムゾーンではなくUTCで時刻を示す文字列を返します{{ aclass.class_date }}。テンプレートに入力すると、正しいゾーンの時刻が表示されます。

strftime常にベース、ネイティブ時間に取り組んでいますか?または、ここで他に何が起こっているのですか?

4

1 に答える 1

47

%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')
于 2012-08-10T21:09:01.407 に答える