django模板中的时区感知日期时间对象

时间:2017-02-08 21:34:20

标签: python django datetime

我无法理解如何在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>

2 个答案:

答案 0 :(得分:1)

*)您可以使用模板标记启用或禁用感知日期时间对象的转换:

{% load tz %}

{% localtime on %}
    {{ value }}
{% endlocaltime %}

{% localtime off %}
    {{ value }}
{% endlocaltime %}

*)在setting.py中,您可以配置TIME_ZONEUSE_TZ

以UTC时间存储日期时间很好(以下是Django网站的引用):

  

在数据库中以UTC格式存储数据仍然是一种很好的做法。主要原因是夏令时(DST)。许多国家都有DST系统,其中时钟在春季向前移动,在秋季向后移动。如果您在当地工作,那么当转换发生时,您可能每年会遇到两次错误。 (pytz文档更详细地讨论了这些问题。)这可能对您的博客无关紧要,但如果您每年一年两次,每年两次向您的客户收取超额费用或低额费用,则会出现问题。此问题的解决方案是在代码中使用UTC,并仅在与最终用户交互时使用本地时间。

to another section of the specification

了解详情

答案 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

相关问题