我有一个简单的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 = True
和TIME_ZONE = 'UTC'
。然而,改变它们都没有区别。我使用的是Django版本5.0,mysqlclient版本2.2.1和MariaDB版本11.1.3。如果有人能告诉我这个问题的解决方案,我将非常感激。
1条答案
按热度按时间0h4hbjxa1#
Django项目我有USE_TZ = True和TIME_ZONE = 'UTC'
| 系统时区|CET||时区|系统|
正如我所读到的,Django使用的是UTC,而MySQL使用的是CET。它们相差1小时。