2016-07-25 24 views
3

我想更改时区Django的正常工作,所以我读的文件怎么办呢NAD这里是我得到了什么:时区不是在Django

#settings.py 
TIME_ZONE = 'Europe/Ljubljana' 

#models.py #date_time gets filled with "auto_now=True") 
date_time = models.DateTimeField(auto_now=True) 

UTC DST对于给定的位置偏移(欧洲/卢布尔雅那)是+2,而在我的分贝,我看到UTC的时间戳。那么我错过了什么?

或者这是按照预期工作,因此它可以分别处理每个请求(对不同时区的人有用)?但是,如果是这样的话,那么设置TIME_ZONE = 'Europe/Ljubljana'有什么用?

回答

2

documentation

启用对时区的支持,在数据库中的UTC的Django店日期时间信息,使用时区感知datetime对象的内部,并将它们转换为最终用户的时区在模板和表单中。

因此您的数据库中的日期时间将始终以UTC格式存储,但会在模板和表单中使用正确的TZ显示。

要在正确的TZ获取日期的其他地方,使用astimezone()

>>> from myapp.models import Details 
>>> import pytz 
>>> d = Details.objects.get(pk=1) 
>>> d.added 
datetime.datetime(2016, 5, 28, 18, 59, 55, 841193, tzinfo=<UTC>) 
>>> localdate = d.added.astimezone(pytz.timezone('Europe/Ljubljana')) 
>>> localdate 
datetime.datetime(2016, 5, 28, 20, 59, 55, 841193, tzinfo=<DstTzInfo 'Europe/Ljubljana' CEST+2:00:00 DST>) 
+0

嗯,这似乎是我的一个问题,因为,我想改变这个时间戳到时代 - 需要highcharts。任何解决方法的建议? – narn

+1

通过设置DATABASE设置中的[TIME_ZONE](https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-DATABASE-TIME_ZONE)选项,您可以强制Django在本地时间存储日期时间 - 但这会迫使你使用不支持时区的数据库(SQLite,MySQL,Oracle)。 – rafalmp

+0

这很酷,目前我正在使用MySQL,所以我会研究它! – narn