我正在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/

10-12 20:05