Using strftime on a django datetime produces a UTC time in the string

强颜欢笑 提交于 2020-01-10 02:32:08

问题


I have the following code in one of my models:

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

self.class_date is a timezone aware DateTimeField, self.class_date.is_aware() is True, USE_TZ is True.

The shortDescription returns a string that gives the time in UTC rather than the default timezone, putting {{ aclass.class_date }} in the template displays the time in the correct zone.

Is strftime always working on the base, native time? Or what else is going on here?


回答1:


When you directly reference pieces of the datetime like %I or %M, it uses it straight as it is with no locale conversion. If you included %Z you'd see that the time is in UTC. If you want locale-aware results, you need use the more limited %X, which will simply spit out the full time converted for the locale.

If you need more, you'll have to convert it:

from django.utils import timezone

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

Or, you can rely on the date filter, which automatically does this for you:

from django.template import defaultfilters

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


来源:https://stackoverflow.com/questions/11909071/using-strftime-on-a-django-datetime-produces-a-utc-time-in-the-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!