【发布时间】:2016-01-12 01:26:49
【问题描述】:
Django 尝试通过在内部以 UTC 存储日期并将其转换为客户端的时区来显示来解决时区问题。这在理论上听起来不错,直到您意识到两个主要的事情:
- 许多时区可以并且确实存在于同一 UTC 偏移量内。
- 由于没有时区HTTP头,我们需要手动确定客户端的时区,这需要使用JavaScript。但是,JavaScript 只能可靠地确定客户端的 UTC 偏移量,可能无法猜出正确的时区。
考虑到这两个问题,我假设一个简单的解决方案是完全忽略时区、DST 等,而是依赖客户端当前的 UTC 偏移量。在每次页面加载时,客户端上的 JavaScript 将使用客户端当前的 UTC 偏移量更新客户端的 cookie,而 Django 中的中间件将为每个请求加载该值。
这是问题所在:Django 使用 get_current_timezone() 从上次调用 timezone.activate() 时设置的值中检索数据。 timezone.activate() 将时区对象作为参数。
有没有办法使用timezone.activate() 仅带有 UTC 偏移量?
【问题讨论】:
-
"但是,JavaScript 只能可靠地确定客户端的 UTC 偏移量,可能无法猜出正确的时区。"好吧,它只能确定客户端在任意时间点的UTC偏移量。即使现在有多个时区具有相同的 UTC 偏移量,这通常也可用于检测正确的时区。