gpt4 book ai didi

Python/Django MySQL 日期时间处理和时区

转载 作者:可可西里 更新时间:2023-11-01 07:18:27 26 4
gpt4 key购买 nike

我有一个名为 Vote 的模型,其中包含一个字段 date :

date = models.DateTimeField(auto_now_add=True)

当我添加一个元素时,MySQL 中的日期是 UTC 日期,但我住在 UTC+2 时区

我认为我在 settings.py 中正确设置了时区:

TIME_ZONE = 'Europe/Paris'

Python 使用正确的时区:

>>> print datetime.datetime.now()
2013-07-03 09:05:04.474000

MySQL 也是:

> SELECT NOW( )
2013-07-03 09:00:48

我可以手动设置日期属性,它可以工作,但我想知道为什么 auto_now_add 返回错误的日期,尽管 python 和 mysql 使用正确的时区

谢谢

最佳答案

解释起来很复杂。来自 Django 1.4 ,

When USE_TZ is False, this is the time zone in which Django will store all datetimes. When USE_TZ is True, this is the default time zone that Django will use to display datetimes in templates and to interpret datetimes entered in forms.

this 指的是 TIME_ZONE。那么你的 USE_TZ 是什么?如果您的 USE_TZ 为 True,那么 Django 将以 UTC 格式存储日期时间并使用 TIME_ZONE 在模板中显示并解释表单。

这是因为,如果您稍后在另一个地区托管您的网站时更改了 TIME_ZONE,则可以轻松地将任何日期时间从 UTC 转换为给定的任何时区。

Django 1.3和更早的时候,

Note that this is the time zone to which Django will convert all dates/times – not necessarily the timezone of the server. For example, one server may serve multiple Django-powered sites, each with a separate time-zone setting.

Normally, Django sets the os.environ['TZ'] variable to the time zone you specify in the TIME_ZONE setting. Thus, all your views and models will automatically operate in the correct time zone.

但没有告诉您日期时间将存储在数据库中的哪个时区。无论如何都需要试验(我猜是 UTC)。

print datetime.datetime.now() 根据服务器机器的时区设置打印数据时间,除非您通过 manage.py shell 打开了 python 控制台。

MySQL 控制台也是如此。如果我是对的,它会显示您机器时区中的日期时间,而不是存储在数据库中的时间。

关于Python/Django MySQL 日期时间处理和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com