Skip to main content
 首页 » 编程设计

python之Django 1.4 中的时区以 UTC 格式从数据库返回

2025年05月04日26小虾米

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

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 时区,因此 Europe/Stockholm 是其当前的系统范围设置。

请您参考如下方法:

SQLite doesn't store TZ information ,所以你要么必须在保存到数据库时将日期转换为 UTC,将 USE_TZ 设置为 False 或更改为 Postgre