19

我的一个模型中有以下代码:

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

self.class_date是时区意识DateTimeFieldself.class_date.is_aware()TrueUSE_TZTrue

shortDescription 返回一个字符串,该字符串以 UTC 而非默认时区给出时间,放入{{ aclass.class_date }}模板中会显示正确时区的时间。

总是strftime在基地工作,本地时间?或者这里发生了什么?

4

1 回答 1

47

当您直接引用日期时间的片段时%I%M它会直接使用它,因为它没有进行语言环境转换。如果您包括在内%Z,您会看到时间在UTC. 如果您想要了解区域设置的结果,则需要使用 more limited %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 回答