我有一个 Django 应用程序,用户可以在其中创建一个活动,然后为一个活动创建多个日志条目。一个活动有一个创建的日期时间,一个日志条目也有一个创建的日期时间。
应使用创建用户在创建活动时的时区创建活动。具体来说,给定用户可能在不同的时区有两个活动;时区设置不是每个用户,而是每个活动。我可以在浏览器中的 JavaScript 中从 UTC 导出用户当前的偏移量(我很高兴依赖它)。
我不知道的是:如何将这些时间保存到数据库中,然后在渲染时正确显示它们?
我打开了 USE_TZ。在英国,一切正常:创建 Activity 时,我将创建的日期时间保存为django.utils.timezone.now()
,并将用户当前的偏移量(来自 JavaScript)保存为 Activity 中的 timezoneHoursOffset。然后,当我在页面上显示 Activity 及其日志条目时,我将其包装在{% timezone "Etc/GMT+(timezoneHoursOffset)" %} ... {% endtimezone %}
.
但是,如果服务器不在英国,则此方法不起作用。时间以 UTC 格式保存在数据库中(我已经通过检查数据库本身而不是使用 ORM 来验证这一点),然后 ORM 将时间“更改”为比 UTC 晚八小时(因为服务器的时区是UTC-8)(这给出了正确的时间!),然后{% timezone %}
标签再减去八个小时的时间,这意味着显示的时间比它应该的时间晚了八个小时。
我不确定我是否应该以不同的方式节省时间。在输出时更改它们;使用时区模板标签;或者是其他东西。这东西很混乱。你会建议我如何处理这种情况?