首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python/Django MySQL日期时间处理和时区

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

Stack Overflow用户
提问于 2013-07-03 15:11:18
回答 1查看 6.8K关注 0票数 4

我有一个名为Vote的模型,它有一个字段date:

代码语言:javascript
复制
date = models.DateTimeField(auto_now_add=True)

添加元素时,MySQL中的日期是协调世界时的日期,但我住在UTC+2时区

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

代码语言:javascript
复制
TIME_ZONE = 'Europe/Paris'

Python使用正确的时区:

代码语言:javascript
复制
>>> print datetime.datetime.now()
2013-07-03 09:05:04.474000

MySQL也是:

代码语言:javascript
复制
> SELECT NOW( )
2013-07-03 09:00:48

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 15:34:41

这是一个需要解释的复杂绑定。来自Django 1.4,

当USE_TZ为False时,是Django将存储所有日期时间的时区。当USE_TZ为True时,this是默认时区,Django将使用该时区在模板中显示日期时间并解释在表单中输入的日期时间。

此引用TIME_ZONE。那么你的USE_TZ是什么呢?

这是因为,如果您稍后在另一个地区托管站点时更改了您的TIME_ZONE,则很容易将任何日期时间从协调世界时转换为任何给定的时区。

在Django 1.3和更早版本中,

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

因此,您的所有视图和模型都将自动在正确的时区中运行。

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

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

MySQL控制台也是如此。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17441812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档