首页 > 解决方案 > Django 对从 MySQL 导入的数据使用了错误的时区

问题描述

我在 Laragon 服务器上使用 Django 3 + Bootstrap 4 + MySQL 5.7,全部在 Windows 10 上。

我在 Django 中的设置:TIME_ZONE = 'Europe/Paris'

我在 MySQL 中的设置:(TIME_ZONE = SYSTEM我的系统配置为“Europe/Paris”)

当我timezone.now()在 Django 或CURRENT_TIMESTAMPMySQL 中使用 a 时,我没有问题,显示正确的时间。但是我从 MySQL 导入的数据显示错误:+2 小时错误。对于我在该主题上阅读的内容,原因可能是time_zone服务器上的 MySQL 表中缺少数据。你的观点是什么?我走上正轨了吗?我不想犯错,所以我宁愿先确认一下。

你认为在 MySQL 中保持这样的设置是否很好。我不应该更喜欢 TIME_ZONE = 'Europe/Paris'而不是TIME_ZONE = SYSTEM吗?

标签: mysqldjangobootstrap-4timezonedjango-timezone

解决方案


保存在数据库中的日期数据始终采用格林威治标准时间 (GMT),django 会根据“TIME_ZONE”选项对其进行更改。因此,当您直接从数据库接收时间数据时,它会显示为 GMT。如果你必须转换它,你需要使用 tz.

from dateutil import tz

to_zone = tz.tzlocal()
datefromdatabase.astimezone(to_zone).date()

好勇气!


推荐阅读