Django会自动检测最终用户的时区吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django会自动检测最终用户的时区吗?相关的知识,希望对你有一定的参考价值。
我正在Django中构建一个应用程序,它允许最终用户检索对某一天的时间(上午12点到12点)敏感的信息。我将此信息存储在我的数据库中,作为一个整数,表示自午夜以来以30分钟为增量的秒数。我正在查看Django的时区文档:https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/并发现自己对Django是否自动使用最终用户时间感到困惑,或者我是否必须收集此信息并在我的视图中对其进行说明。
任何信息都有帮助!谢谢。
没有。有些软件包可以根据IP地址检测时区。你可以看看https://github.com/adamcharnock/django-tz-detect
Django没有检测到最终用户的时区。但它的作用非常聪明。
考虑一下:
Client | Server | UTC
time 9:00 am | time 12:00 pm | time 7:00 am
timezone UTC+2:00 | timezone UTC+5:00 |
如您所见,服务器和客户端位于不同的时区,因此具有不同的本地时间。
现在,假设客户端请求在数据库中创建新对象。该对象具有日期字段。所以Django所做的是,它将对象的日期保存在UTC下。
这是如何运作的?
Django将首先采用服务器的本地时间,即凌晨12:00。然后它将通过减去5小时将其转换为UTC时间,该小时变为上午7:00。这是Django用来保存对象的时间。
现在,让我们稍后说,客户想看看他什么时候创建该对象。
对象的创建时间是7:00 am UTC
。要向客户端显示对象的创建时间,您可以在另一个答案中使用Jason链接的应用程序。但我发现使用IP的时区查找非常可靠,因为用户可能正在使用代理。
或者,您可以用UTC渲染时间并使用一些javascript将其转换为客户端的本地时间。由于JS在浏览器上运行,它将准确地从他们的计算机中选择客户端的时区。
最后,当您将7:00 am UTC
转换为客户端的时区时,通过增加2小时(因为它比UTC提前2小时),客户端将看到对象的创建时间为9:00 am
,这是他们所期望的。
不仅如此,如果在UTC-5:00
时区的地球另一侧还有另一个客户,你可以通过减去5小时来显示对象的时间,这将给2:00 am
。因此,根据该用户,它是在凌晨2点添加的。
以上是关于Django会自动检测最终用户的时区吗?的主要内容,如果未能解决你的问题,请参考以下文章
查询 Django 模型时,如何将 Django 中的 DateTimeField 从 UTC 转换为最终用户的时区(通常是 PST)?