【问题标题】:Django models datetime with timezone UTC+1 saved as UTC+0Django 使用时区 UTC+1 对日期时间进行建模,另存为 UTC+0
【发布时间】:2021-12-24 16:24:45
【问题描述】:

在我的 django 项目中,我有一个模型,我在其中存储数据(在我的 read_date 字段中),并带有一个用于存储日期(带时区)的 DateTime 字段:

class Results(models.Model):
    id = models.AutoField(primary_key=True)
    device = models.ForeignKey(Device, null=True, on_delete=models.SET_NULL)
    proj_code = models.CharField(max_length=400)
    res_key = models.SlugField(max_length=80, verbose_name="Message unique key", unique=True)
    read_date = models.DateTimeField(verbose_name="Datetime of vals readings")
    unit = models.ForeignKey(ModbusDevice, null=True, on_delete=models.SET_NULL)

我使用时区在 settings.py 文件中设置:

TIME_ZONE = 'UTC+1'

USE_TZ = True

所以,问题是,当我通过 UTC+1 时区的更正格式化的 ditetime 时:

2021-11-12 10:39:59.495396+01:00

在我的数据库中我得到:

2021-11-12 9:39:59.495396+00

为什么我的存储值是 UTC+0 而不是使用传递的时区?

提前非常感谢

【问题讨论】:

    标签: python-3.x django datetime django-timezone


    【解决方案1】:

    所有日期时间都以 UTC 格式存储。 这不是一个错误,这是一个功能。数据库在排序、选择、过滤等时需要一种格式来处理 DateTime 数据。因此,当您发出一些 SQL 请求时,您可以传递所需的时区以进行自动转换。例如,您的第一个用户在 UTC+1,您可以使用此参数发出请求,您的另一个用户 UTC-9,结果可能会有所不同。

    【讨论】:

      猜你喜欢
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2012-08-06
      相关资源
      最近更新 更多