Django 1.4中的时区从UTC返回UTC

时间:2012-09-11 12:33:11

标签: python django django-models django-admin

以下是我的django项目的settings.py中的两个相关设置。

USE_TZ = True
TIME_ZONE = 'Europe/Stockholm'

我在模型中定义了这样的DateTimeField。

triggeredTime = models.DateTimeField('Utlöses')

这是由Django管理员应用程序和表单管理的。因此,表单允许我在数据库的此字段中输入日期和时间。在这种情况下,DB是sqlite3。

(我不允许将图片发布为垃圾邮件预防,所以这里作为链接) http://i.imgur.com/ukadP.png

为了举例,我输入的时间是14:10:05。

然后我启动django shell。

$ python manage.py shell
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from scheduler.models import Task, Schedule
>>> s = Schedule.objects.all()
>>> for row in s:
...  print row.triggeredTime
... 
2012-09-11 12:10:05

这显然是UTC。即使我尝试在混合中添加pytz并设置tzinfo,我也会得到一个不在DST中的值。我不应该硬编码DST到我的代码中。

>>> import pytz
>>> from pytz import timezone
>>> stockholm = timezone('Europe/Stockholm')
>>> for row in s:
...  print row.triggeredTime.replace(tzinfo=stockholm)
... 
2012-09-11 12:10:05+01:00

就此而言,我甚至不必对时区进行硬编码,因为django声称已覆盖了时区。那么有人可以解释如何在Django中使用时区吗?

仅供参考,服务器实际上位于CET时区,因此Europe / Stockholm是其当前的系统范围设置。

1 个答案:

答案 0 :(得分:0)

SQLite doesn't store TZ information,因此您需要在保存到数据库时将日期转换为UTC,将USE_TZ设置为False或更改为Postgre