2

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

USE_TZ = True
TIME_ZONE = 'Europe/Stockholm'

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

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

这是由 Django 管理应用程序和表单管理的。所以表单允许我在数据库的这个字段中输入日期和时间。在这种情况下,数据库是 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 时区,因此欧洲/斯德哥尔摩是其当前系统范围的设置。

4

1 回答 1

0

SQLite不存储 TZ 信息,因此您必须在保存到 DB 时将日期转换为 UTC,将 USE_TZ 设置为 False 或更改为 Postgre

于 2012-09-11T23:12:23.400 回答