Django会自动检测最终用户的时区吗?

7
我正在使用Django构建一个应用程序,允许最终用户在给定的一天内检索与时间敏感的信息(从凌晨12点到次日凌晨12点)。我将这些信息存储在数据库中,以表示自午夜以来的秒数,每30分钟增加一次。我查看了Django的时区文档:https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/,但对于Django是否自动使用最终用户的时间,或者我是否需要收集此信息并在我的视图中进行处理感到困惑。
任何信息都将非常有帮助!谢谢。
3个回答

19

Django无法检测终端用户的时区,保存在数据库中的对象采用UTC时间。

可以使用JavaScript将UTC时间转换为用户浏览器上的本地时间进行显示。

Django也提供了在服务器上为特定请求或会话转换时区的方法:详见文档。但是,使用JavaScript肯定是更容易的选择。

Django还有一个TIME_ZONE设置:文档。但这非常有限,Django只支持一种时区,并且不会根据客户端的时区而改变。


使用JavaScript将UTC时间转换为本地时间并在用户浏览器上显示是最好、最简单的解决方案。


注意:旧版本的答案(已标记为接受)可在此处找到。


哦,我不知道这个。在项目的几个部分中,我正在使用JavaScript方法,并且效果很好。对于我正在处理的部分,用户需要在每隔一天的特定时间段内查看某些内容,例如从上午10点到下午2点。根据你所说,Django应该可以本地化理解这个需求。如果不行,我将发送本地UTC时间与我的请求,并根据此为用户提供信息。 - Max Miller
2
@MaxMiller,你需要设置USE_TZ=True来启用时区支持。 - xyres

4

0
不,即使在USE_TZ = TrueTIME_ZONE = 'UTC'TIME_ZONE = 'America/New_York'的情况下,Django也不会自动检测和应用用户当前的时区。
但是,有一个名为django-tz-detect的工具可以自动检测并应用用户当前的时区,而不仅仅应用settings.py中设置的一个时区TIME_ZONE。您可以查看我的回答,详细解释如何设置django-tz-detect

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接