【问题标题】:Django DateTime field to generate timestamp fields withOUT timezoneDjango DateTime 字段生成没有时区的时间戳字段
【发布时间】:2010-12-24 13:47:25
【问题描述】:

我正在开发一个 Django 应用程序,我需要将所有 postgres 表示的日期时间字段保存在 UTC 中(因为它们应该如此)。当我使用 DateTime 字段创建模型时,它们的数据库表示会生成为“timestamp with time zone”。 虽然我可以手动更改表格以从字段中删除时区,但我想知道 DateTime 模型字段是否有能力不这样做 - 即,为某些人创建“timestamp with out time zone”字段。 那可能吗?还是我必须更改它们的表格? 谢谢, 哈雷尔

【问题讨论】:

    标签: django datetime postgresql timezone utc


    【解决方案1】:

    Django 中 postgres 的数据类型映射到字符串文字 timestamp with time zone,并且似乎没有更改该类型的选项。

    据我所知,您有三个选择:

    1. 利用 Django 的钩子来执行raw sql after the create table statement。为此,请在您的应用程序中创建一个名为 sql 的目录,并在该目录中创建一个名为 mymodel.postgres_psycopg2.sql 的文件。把你的 alter table 语句放在那里。

    2. 编写一个自定义字段以根据您认为合适的方式定义时间戳字段的修饰符。请参阅“writing custom model fields”。

    3. 保持 django 字段不变,并在您的应用程序中执行时区转换,以便您绝对确定您正在传递正确的时间。

    我个人对数据完整性的偏好是#3。就像字符编码一样,你总是想确保你知道字符集并正确处理转换,我对属性(包括 TZ)尽可能精确定义的日期/时间感到更舒服。您今天可能确定您的所有输入都已在 UTC 中到达您的应用程序,但这可能会改变,特别是如果时间戳是由最终用户提供的。对于它的价值,我会加倍努力,将应用程序中的时间戳转换为 UTC,并将其以 UTC 作为时区存储在数据库中。

    【讨论】:

    • 谢谢 Jarret,我正在我的应用程序中进行时区转换,因为我不相信任何有时区的人;o) 我打算将所有日期存储为 UTC,因为我知道用户的时区,所有用户输入的日期都将转换为 UTC,然后再将任何内容保存到数据库。但是,我也想将创建/修改日期视为 UTC,但即使我的 settings.TIMEZONE 是 UTC,Django 似乎也会在字段中保存时区偏移量(如果我将创建日期保存在 11 月 25 日它会将其保存为 +01 偏移量,因为当时英国在 DST。因此我想杀死 db tz 信息。
    • 另一种选择是在 UTC 中运行服务器本身。 serverfault.com/questions/14685/…
    猜你喜欢
    • 2022-12-12
    • 1970-01-01
    • 2012-07-05
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多