gpt4 book ai didi

Django:时区问题

转载 作者:行者123 更新时间:2023-12-02 00:52:06 28 4
gpt4 key购买 nike

注意:我删除了之前存在的问题,并在此处仅提供相关信息。

我们的数据库服务器 (RH) 指定了 TIME_ZONE =“Europe/London”。并且,在 Django settings.py 中,我们指定 TIME_ZONE = "America/New_York"。

并且,在我的模型类中我指定了:

created = models.DateTimeField(editable=False,auto_now=False, auto_now_add=True)
modified = models.DateTimeField(editable=False,auto_now=True, auto_now_add=True)

当我查看管理站点中的数据时,我得到的是 UTC/GMT 时间,而不是东部时间。

自从我指定“America/New_York”作为 Django 的时区以来,我认为所有时间都是由 Django 自动调整的。

感谢任何帮助/澄清。

谢谢埃里克

最佳答案

依赖日期/时间“automagic”是危险的,这些 auto_add 模型参数是一个陷阱。始终了解您正在处理的时区。 Python 通过将 tzinfo 成员附加到其日期时间对象使这变得更容易。虽然这些对象默认情况下是“幼稚的”,但我鼓励您始终附加 tzinfo 详细信息。 Python 仍然需要一些关于 python-dateutilpytz (我使用的)的额外帮助。不过,这里有一个通用规则 - 始终将日期时间作为 UTC 存储在数据库中。

为什么?您的用户可能位于不同的本地,手机和笔记本电脑在旅行,服务器配置错误或镜像在不同的时区。这么多头痛。日期时间永远不应该是幼稚的,如果它们是幼稚的(如在数据库中)并且您需要上下文,还可以在表中包含一个时区字段。

所以就你的情况而言。

  1. 不要使用 auto_now 字段,而是使用自定义 save()。
  2. 将 UTC 存储在数据库中
  3. 如果您需要了解时区(例如用户事件),请将时区也存储在数据库中。
  4. 转换为必要/请求的时区

如果您使用 pytz,则localize()方法很棒。 Python 的 datetime 对象有有用的 Replace() 和 astimezone()。

还有一点需要注意的是,如果您的数据库是时区原生数据库(例如 MySQL),请确保您的日期时间采用 UTC,然后使用 Replace(tzinfo=None),因为数据库连接器无法处理 tz 感知对象。

这是一个thread详细了解 Django 的 auto_now 字段。

关于Django:时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4805778/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com