使用Python,自动确定用户当前时区的最准确方法是什么?

6

我已经确认dateutils.tz.tzlocal()在Heroku上无法使用,即使它可以使用,它也只会从所在计算机的操作系统中获取时区,不一定是用户的时区。

除了存储用户的时区之外,还有没有其他方法确定请求来自哪里?(我正在使用Flask)

Twitter确实有一个设置来调整您的时区,但我想知道他们如何确定默认时区,并且在用户未登录时该设置如何工作。


你在谈论什么样的环境?如果用户来自世界各地,那该怎么办? - Eero Aaltonen
1
这个任务如果使用客户端运行的话,是否用 JavaScript 更好呢? - Joran Beasley
我所使用过的所有Web应用程序都存储用户的时区偏好。虽然这只是一个小样本,但仍是一个样本。它相对不太优雅,但简单并且在最小化由于奇怪的客户端/操作系统而失败方面表现良好 :) - Oren Mazor
不相关的:要找出服务器时区,您可以使用 tzlocal.get_localzone() - jfs
2个回答

9

您可以使用JavaScript并将客户端的时区设置在cookie中。您甚至可以使用AJAX请求,然后将偏移量发送到服务器并保存在客户端会话中。

var offset = new Date().getTimezoneOffset();

描述

时区偏移是UTC和本地时间之间的差异,以分钟为单位。请注意,如果本地时区落后于UTC,则偏移量为正,如果本地时区领先于UTC,则偏移量为负。例如,如果您的时区是UTC+10(澳大利亚东部标准时间),将返回-600。夏令时使得即使对于给定的语言环境,该值也不是一个常数。

Mozilla Javascript 参考文档: getTimezoneOffset


注意:它的符号与通常所称的UTC偏移量相反(本地时间= UTC + 偏移量)。 - jfs

1
如果您可以轻松地从 Flask 中获取用户的 IP 地址(可能是从 request 对象中获取),那么您可以使用地理定位。例如,通过 http://www.hostip.info/
但这种方法可能不是百分之百可靠的。例如,如果有人使用 VPN 或其他类型的代理,您将无法看到他的“真实”IP地址。

是的,确实。我对js不是很熟悉。在这里每天都能学到新东西。 :-) - Roland Smith
如果你想从一个地点获取时区,你可以参考这个链接:[https://dev59.com/GGQn5IYBdhLWcg3w36XV]。 - jfs

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