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

Tho*_*s K 4 python mysql django timezone datetime

我有一个Vote用字段调用的模型date:

date = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

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

我想我正确设置了时区settings.py:

TIME_ZONE = 'Europe/Paris'
Run Code Online (Sandbox Code Playgroud)

Python使用正确的时区:

>>> print datetime.datetime.now()
2013-07-03 09:05:04.474000
Run Code Online (Sandbox Code Playgroud)

MySQL也是:

> SELECT NOW( )
2013-07-03 09:00:48
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Bab*_*abu 9

这是一个复杂的解释.来自Django 1.4,

当USE_TZ为False时,是Django存储所有日期时间的时区.当USE_TZ为True时,是Django用于在模板中显示日期时间和解释在表单中输入的日期时间的默认时区.

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

这是因为,如果您TIME_ZONE在其他地区托管您的网站时更改以后,可以轻松地将任何日期时间从UTC转换为给定的任何时区.

Django 1.3及更早版本中,

请注意,是Django将转换所有日期/时间的时区 - 不一定是服务器的时区.例如,一台服务器可以为多个Django供电的站点提供服务,每个站点都有一个单独的时区设置.

通常,Django将os.environ ['TZ']变量设置为您在TIME_ZONE设置中指定的时区.因此,您的所有视图和模型将自动在正确的时区内运行.

但是没有告诉你datetime将在什么时区存储在数据库中.无论如何都需要进行实验(我的猜测是UTC).

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

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