我知道tzinfo = "America/Los_Angeles"
我想保存到模型的日期时间实例(在哪里)。
我应该在保存之前以某种方式将其转换为 UTC 吗?还是我可以按原样保存它,因为它知道自己的时区?我是否需要稍后将其转换为用户的时区activate()
,或者 Django 是否会为我这样做,因为实例是知道的?
我很好奇这方面的惯例是什么。提前致谢。
我知道tzinfo = "America/Los_Angeles"
我想保存到模型的日期时间实例(在哪里)。
我应该在保存之前以某种方式将其转换为 UTC 吗?还是我可以按原样保存它,因为它知道自己的时区?我是否需要稍后将其转换为用户的时区activate()
,或者 Django 是否会为我这样做,因为实例是知道的?
我很好奇这方面的惯例是什么。提前致谢。
您不必在保存之前将其转换为 UTC,因为 Django 会自动为您执行此操作。当您检索它时,它将作为TIMEZONE
设置中定义的时区检索。
您可以覆盖它activate()
并查看当前时区,使用django.utils.timezone.get_current_timezone()
.
这意味着您从数据库中检索的时间可能与您最初用于保存对象的日期时间对象的时区不同。但是,它仍将是同一时刻。
如果您对每个用户都有一个时区,您应该将其与用户的个人资料一起保存,并activate()
在检索包含DateTimeField
. 检索到的对象将位于适当的时区。
或者,您可以使用override()
上下文管理器。
如果您确定始终希望datetime
对象位于用户的时区而不是服务器的时区,请编写一个自定义中间件来调用activate()
. request.user
您需要自己存储/检索时区,因为 Django 无法知道用户的时区是什么,并且默认情况下不会将其存储在 User 模型中。