我正在Django中构建一个应用程序,该应用程序允许最终用户检索在一天中对一天中的时间(上午12点至上午12点)敏感的信息。我将此信息作为整数存储在数据库中,该整数表示自午夜以来以30分钟为增量的秒数。我在查看Django的时区文档:https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/,发现自己对Django是否自动使用最终用户时间感到困惑,或者我是否必须收集此信息并在我的意见中作出解释。
任何信息都有帮助!谢谢。
最佳答案
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 am。然后,它将减去5小时(即7:00),将其转换为UTC时间。这是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:00添加的。关于python - Django是否会自动检测最终用户的时区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48027527/