在django datetime上使用strftime会在字符串中生成UTC时间

Rob*_*rne 13 django django-templates django-models

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

def shortDescription(self):
    return self.name + ' ' + self.class_date.strftime("%I:%M")
Run Code Online (Sandbox Code Playgroud)

self.class_date是一个时区意识DateTimeField,self.class_date.is_aware()True,USE_TZTrue.

shortDescription返回一个字符串,该字符串以UTC而不是默认时区提供时间,放入{{ aclass.class_date }}模板会在正确的区域中显示时间.

strftime一直在努力的基础上,本地时间?或者这里还有什么?

Chr*_*att 38

当你直接引用类的日期时间的碎片%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")
Run Code Online (Sandbox Code Playgroud)

或者,您可以依赖date过滤器,它会自动为您执行此操作:

from django.template import defaultfilters

def shortDescription(self):
    return self.name + ' ' + defaultfilters.date(self.class_date, 'g:i')
Run Code Online (Sandbox Code Playgroud)

  • 在第二种方法中,“class_date”也需要转换为本地时间。 (2认同)