我无法理解如何在django db中使用datetime对象。
我将datetime.now()
存储在DateTimeField
中,但无法以可读的方式显示它。目前它显示UTC时间。
我应该使用datetimefield存储时区,还是应该在查询和模板视图期间将其转换为我的时区?
这太复杂了我必须完全错误。
如果是这种情况,我如何在模板中显示太平洋时区时间?
谢谢。
<tbody>
{% for session in session_list %}
<tr></tr><td>{{session.date}}</td><td>{{session.email}}</td><td>{{session.userData}}</td></tr>
{% endfor %}
</tbody>
答案 0 :(得分:1)
*)您可以使用模板标记启用或禁用感知日期时间对象的转换:
{% load tz %}
{% localtime on %}
{{ value }}
{% endlocaltime %}
{% localtime off %}
{{ value }}
{% endlocaltime %}
*)在setting.py
中,您可以配置TIME_ZONE
和USE_TZ
以UTC时间存储日期时间很好(以下是Django网站的引用):
了解详情在数据库中以UTC格式存储数据仍然是一种很好的做法。主要原因是夏令时(DST)。许多国家都有DST系统,其中时钟在春季向前移动,在秋季向后移动。如果您在当地工作,那么当转换发生时,您可能每年会遇到两次错误。 (pytz文档更详细地讨论了这些问题。)这可能对您的博客无关紧要,但如果您每年一年两次,每年两次向您的客户收取超额费用或低额费用,则会出现问题。此问题的解决方案是在代码中使用UTC,并仅在与最终用户交互时使用本地时间。
答案 1 :(得分:0)
只需使用Django 3.x新语法添加答案作为参考:
在模板中,包括tz:
{% load tz %}
显示时区感知对象时,请使用timezone:'TIMEZONE'
过滤器或localtime
过滤器:
您的代码应如下所示
<tbody>
{% for session in session_list %}
<tr></tr><td>{{session.date|localtime}}</td><td>{{session.email}}</td><td>{{session.userData}}</td></tr>
{% endfor %}
</tbody>
在Django官方网站上了解更多here。