我有django 1.7.x项目。我通过shell插入了新数据,如下所示:
from polls.models import Question, Choice
from django.utils import timezone
q = Question(question_text = "What's new?", pub_date = timezone.now(), status = True)
q.save()
q.pub_date
但是,我发现日期设置为UTC。因此,在项目设置中,我将时区更改为TIME_ZONE = 'Africa/Cairo'
。但是,通过manage shell
q.pub_date = timezone.now()
通过{{1}}更新项目shell的记录不会将记录的时区更改为新记录。它比我的开发计算机少两个小时,开罗时区和UTC之间的差异。我能错过什么?
答案 0 :(得分:5)
请注意,
now()
将始终以UTC为单位返回时间,而不管TIME_ZONE
的值是多少;您可以使用localtime()
转换为当前时区的时间。
但请注意,Django始终以UTC格式存储日期时间,因此即使您使用localtime()
进行转换,它也不会影响值的存储方式。所以q.pub_date
将是UTC或在数据库(而不是Django)设置中定义的时区。
但重要的是如何向用户呈现日期时间,以及timezone documentation中描述的控制方式。