2

我使用日期时间字段将当前日期保存在模型中,在该字段中我指示默认将当前日期作为值。

_defaults = {
        'f_inicio' : lambda *a: datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
    }

假设当前日期为'07/10/2013 17:24:05',则视图中为日期'07/10/2013 12:24:05'并在数据库中更正日期为'07/10 /2013 17:24:05'; 收集这减去五个小时。用户可以设置时区“美国/波哥大”,哥伦比亚在该地区 (GTM - 5:00)。但是不明白如何正确显示用户,因为我得到了应该显示的完全不同的值。显然,这将 GTM 哥伦比亚视为“GTM 0”。将应该给我的大概日期create_date字段作为默认值是“2013-10-07 22:24:05.384”。

任何人都知道可能会发生什么,非常感谢在这个让我发疯的问题上的任何帮助。

4

1 回答 1

5

这让我在过去太疯狂了。这是一个非常简单的问题。

存储在数据库中的日期是 UTC (GMT-0) 时区。假设这个人的时区设置为 GMT - 5:00,那么在将值存储到数据库时,日期将添加 5 小时(正好是 5,不是多一点或少一点),因此我们得到 UTC 时间存入数据库。现在,当显示相同时,它将检查用户时区并发现其 GMT - 5:00,因此数据库时间将减去 5(同样是 5,不多不少)并显示用户。

这对于在不同时区使用的系统非常有用。所以理解是输入是在存储在 UTC(GMT-0) 中的用户时区中获取并显示到用户的时区(即使用户查看的是不同的时区,时间也会准确到他们的时区)

注意:如果用户未设置时区,则考虑浏览器时区并将与右上角的警告图标一起使用

而已。希望这能给你更好的清晰度!

于 2013-10-08T04:33:03.457 回答