【问题标题】:timezone aware datetime objects in django templatesdjango 模板中的时区感知日期时间对象
【发布时间】:2017-06-26 17:11:03
【问题描述】:

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

【问题讨论】:

  • 建议在数据库中以 UTC 存储日期+时间字段,因为 UTC 是明确的。您可能想找到一种方法以用户的时区而不是您自己的时区显示时间。

标签: python django datetime


【解决方案1】:

只需使用 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

【讨论】:

    【解决方案2】:

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

    {% load tz %}
    
    {% localtime on %}
        {{ value }}
    {% endlocaltime %}
    
    {% localtime off %}
        {{ value }}
    {% endlocaltime %}
    

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

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

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

    阅读更多来自official Django Site

    【讨论】:

    • 谢谢,现在这很有意义。
    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2016-10-06
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    相关资源
    最近更新 更多