注意:我删除了之前存在的问题,并在此处仅提供相关信息。
我们的数据库服务器 (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 时间,而不是东部时间。
我认为所有时间都是由 Django 自动调整的,因为我指定“America/New_York”作为 Django 的时区。
任何帮助/澄清表示赞赏。
谢谢
埃里克
依赖日期/时间“automagic”是危险的,这些 auto_add 模型参数是一个陷阱。始终了解您正在处理的时区。 Python 通过将 tzinfo 成员附加到其日期时间对象使这变得更容易。虽然这些对象默认情况下是“幼稚的”,但我鼓励您始终附加 tzinfo 详细信息。 Python 仍然需要一些额外的帮助python-dateutil or pytz(我用的是什么)。不过,这里有一个通用规则 - 始终将日期时间作为 UTC 存储在数据库中。
为什么?您的用户可能位于不同的本地,手机和笔记本电脑在旅行,服务器配置错误或镜像在不同的时区。这么多头痛。日期时间永远不应该是幼稚的,如果它们是幼稚的(如在数据库中)并且您需要上下文,还可以在表中包含时区字段。
所以就你的情况而言。
- 不要使用 auto_now 字段,而是使用自定义 save() 。
- 将 UTC 存储在数据库中
- 如果您需要知道时区(例如用户事件),请将时区也存储在数据库中。
- 转换为必要/请求的时区
如果您使用 pytz,本地化() http://pytz.sourceforge.net/#localized-times-and-date-arithmetic方法很棒。 Python 的日期时间对象有有用的replace() 和astimezone()。
另请注意,如果您的数据库是时区天真的(例如 MySQL),请确保您的日期时间采用 UTC,然后使用 Replace(tzinfo=None),因为数据库连接器无法处理 tz 感知对象。
这里有一个thread https://stackoverflow.com/questions/1737017/django-auto-now-and-auto-now-add详细了解 Django 的 auto_now 字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)