【问题标题】:Can we have Django DateTimeField without timezone?我们可以有没有时区的 Django DateTimeField 吗?
【发布时间】:2016-06-23 10:01:07
【问题描述】:

我已经搜索过了,找不到任何笔记或教程。

【问题讨论】:

    标签: python django datetime timezone


    【解决方案1】:

    当您在设置中设置USE_TZ = True(有关详细信息,请参阅USE_TZ)时,Django 以UTC 格式将日期和时间信息存储在数据库中,否则它将存储原始日期时间(没有时区的日期时间)。

    为方便起见,django-admin startproject 创建的默认settings.py 文件包含USE_TZ = True。

    因此您必须在设置中设置USE_TZ = False 以避免附加时区。

    注意:但是,您不能仅针对特定字段分离时区。按照我上面的建议,您将时区从整个数据库中分离出来,所以我的猜测是最好使用 CharField 来存储没有时区的日期。

    您可以尝试覆盖默认保存处理程序,并在 saving 项目进入数据库之前从 DatetimeField 中删除时区,方法是为您的模型定义保存方法:

    def save(self, *args, **kwargs):
        self.datetime_field = self.datetime_field.replace(tzinfo=None)
        super(MyModel, self).save(*args, **kwargs)
    

    【讨论】:

    • 我相信这是默认的。
    • @Andriy 我想要这样的日期和时间格式'2016-03-09 6:51:43.195486'
    • @Andriy 我使用查询插入表(不使用 django ORM),任何 python 函数都可以。
    • @Sagar 好吧,在保存之前尝试将 tz_info 替换为 None,datetime_field = datetime_field.replace(tzinfo=None)
    • @Andriy,这工作正常。但是在数据库(postgresql)中,我们得到带有时区的时间戳,这需要像'没有时区的时间戳',迁移下的任何东西都不是来自外部迁移
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2013-07-19
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多