我正在 Django 中构建一个应用程序,它允许最终用户检索对给定日期中的时间(上午 12 点到凌晨 12 点(敏感的信息。我将此信息存储在我的数据库中,作为一个整数,以 30 分钟的增量表示自午夜以来的秒数。我正在查看 Django 的时区文档:https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/,发现自己对 Django 是否自动使用最终用户时间感到困惑,或者我是否必须收集这些信息并在我的观点中说明它。
任何信息都会有所帮助!谢谢。
Django 不会检测到最终用户的时区。它以UTC时间保存数据库中的对象。
然后,您可以使用JavaScript在浏览器上将UTC时间转换为客户端的时间以进行显示。
Django 还提供了在服务器上为特定请求或会话转换时区的方法:请参阅文档。但是,使用 JavaScript 绝对是更简单的选择。
Django 也有一个TIME_ZONE
设置。但这是非常有限的。Django 使用此时区来显示管理员或其他地方的时间。它非常有限,因为仅支持一个时区,并且它不会根据客户端的时区而更改。
使用 JavaScript 在用户浏览器上将 UTC 转换为本地时间是最好和最简单的解决方案。
<小时 />注意:可以在此处找到此答案的旧版本(标记为已接受(。
No. 您可以在一些软件包中根据 IP 地址检测时区。 你可以看看 https://github.com/adamcharnock/django-tz-detect
不,Django 不会自动检测和应用用户的当前时区,即使USE_TZ = True
和TIME_ZONE = 'UTC'
或TIME_ZONE = 'America/New_York'
。
但是,有django-tz-detect可以自动检测并应用用户的当前时区,而不是仅应用一个设置为settings.py
TIME_ZONE时区。您可以看到我的回答详细解释了如何设置django-tz-detect
。