【问题标题】:timezone aware datetime for django using templates使用模板的 django 时区感知日期时间
【发布时间】:2013-07-02 12:16:40
【问题描述】:

我一直在处理 django 中的一个小问题,但我还没有完全弄清楚。我有一个在 godaddy vps 上运行的 django 应用程序,在 views.py 中我将这些行作为函数定义的一部分

    currtime=datetime.datetime.now()
            return render_to_response('test.html',{'currtime' : currtime })

现在在我的 test.html 中,我使用模板来获取当前时间

          {% load tz %}
          {% localtime on %} 
          <p>{{currtime}}</p>
          {% endlocaltime %}

我相信 django 中的时区感知日期时间对象的要点是在通过模板呈现 HTML 时自动将时间转换为本地时间。如您在上面看到的,我已经加载了 pytz 库并启用了本地时间...即使我在印度,我仍然得到一个当前时间值,它与德克萨斯州的时间相同 CDT 。 我希望它工作的原因是,我有一个日期时间存储在 UTC 的数据库,我希望根据用户的地理位置以本地时间显示时间(即从 UTC 转换为本地时间)。 任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 你是否在settings.py文件中设置了时区:TIME_ZONE = '...'
  • @Carl TIME_ZONE 设置为 America/Chicago,我尝试将其注释掉,但它仍然显示芝加哥时间。我应该在这里设置什么?另外 USE_TZ = True 在我的设置文件中,从我读到的内容中说 USE_TZ 需要为 True 才能感知时区的日期时间,谢谢您的回复
  • 嗨,注释掉 TIME_ZONE 将不起作用,因为芝加哥是默认设置,您必须将其设置为您想要的时区,USE_TZ 默认为 False,我认为您应该尝试设置 TIME_ZONE到您的时区,然后将 USE_TZ 设置为 True。
  • 但是将时区设置为我的时区将无济于事,因为如果其他国家/地区的其他人尝试访问服务器,它将不会转换为本地时间.. USE_TZ 在我的 settings.py 文件中为 True。 .

标签: python django datetime


【解决方案1】:

我刚到这里不小心在谷歌上搜索了一个相关问题,但我想我会回答,以防万一有人也发现它......

您所追求的不起作用,因为 localtime 是指服务器上的本地时间(以您的设置中定义的时区表示)。在服务器上运行的 django 应用程序无法确定客户端的时区是什么。您应该在浏览器中检测时区,例如使用jstz

一个更强大的解决方案是让用户选择他们自己的时区,但也使用自动检测设置选择(这样大部分时间他们只需按 OK)。然后当然可以将其存储在服务器上,从那时起,您可以使用用户的时区生成模板:

{% loadtz %}
{% timezone user.timezone %}
.....
{% endtimezone %}

【讨论】:

    猜你喜欢
    • 2017-06-26
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2013-02-27
    相关资源
    最近更新 更多