Mariadb时间戳和Django DateTimeField之间有1小时的差异

gkl3eglg  于 4个月前  发布在  Go
关注(0)|答案(1)|浏览(59)

我有一个简单的Django项目,它使用一个在localhost上运行的现有mariadb数据库作为默认数据库。在数据库中,时间戳被正确存储,但在Django中,它们是一个小时后。
我创建了一个名为test的简单数据库,其中有一个名为time的表:

CREATE DATABASE test;
CREATE TABLE time (time_id INT PRIMARY KEY AUTO_INCREMENT, time TIMESTAMP);
INSERT INTO time (time) VALUES (NOW());

字符串
然后我启动了一个名为testproject的Django项目,并使用了一个名为testapp的应用程序。我设置了数据库设置并定义了以下模型:

class Time(models.Model):
    time_id = models.AutoField(primary_key=True)
    time = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'time'


运行migrate后,当我打开python manage.py dbshell时,我得到:

MariaDB [test]> SELECT CONVERT_TZ(`time`, @@session.time_zone, '+00:00') AS 'utc_datetime' FROM time;
+---------------------+
| utc_datetime        |
+---------------------+
| 2023-12-27 20:40:46 |
+---------------------+
1 row in set (0.000 sec)


这是正确的。然而,当我对python manage.py shell做同样的事情时,我得到:

>>> from testapp.models import Time
>>> Time.objects.latest('time').time
datetime.datetime(2023, 12, 27, 21, 40, 46, tzinfo=datetime.timezone.utc)


我在一个更复杂的项目中注意到了这一点,但能够在这个非常简单的例子中重现它。我住在时区CET,在Django项目的settings.py文件夹中,我有USE_TZ = TrueTIME_ZONE = 'UTC'。然而,改变它们都没有区别。我使用的是Django版本5.0,mysqlclient版本2.2.1和MariaDB版本11.1.3。如果有人能告诉我这个问题的解决方案,我将非常感激。

0h4hbjxa

0h4hbjxa1#

Django项目我有USE_TZ = True和TIME_ZONE = 'UTC'
| 系统时区|CET||时区|系统|
正如我所读到的,Django使用的是UTC,而MySQL使用的是CET。它们相差1小时。

相关问题