我有下一个型号:
class People(models.Model):
name = models.CharField(max_length=100)
lastname = models.CharField(max_length=100)
_date=models.DateTimeField()
在views.py
中- 当我尝试这个时:
p = People(name='foo', lastname='bar', _date=datetime.now())
p.save()
它返回当前时间:2012-10-31 17:33:10.152323
但是,当我在数据库中检查此记录时,它会显示:
name lastname _date
foo bar 2012-10-31 21:33:10
为什么会这样(两个不同的时间)发生?
编辑:(差异为4小时):2012-10-31 17:33:10.152323 and 2012-10-31 21:33:10
答案 0 :(得分:2)
Django使用时区将DatetimeFields
存储到您的数据库中。这就是您在设置中提供TIME_ZONE
的原因。
您可以在此处详细了解:https://docs.djangoproject.com/en/dev/topics/i18n/timezones/
如果您想为您的字段提供非天真的日期时间,则必须使用:
now = datetime.utcnow().replace(tzinfo=timezone('Your/Timezone'))
时区可以在这里找到:http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
答案 1 :(得分:1)
即使我也面临着同样的问题。这是因为根据 django 文档
<块引用>启用时区支持后,Django 将日期时间信息以 UTC 格式存储在数据库中,在内部使用时区感知日期时间对象,并在模板和表单中将它们转换为最终用户的时区。
此问题的解决方案是编写一个函数,将存储在数据库中的时间转换为您的本地时间。
from django.utils import timezone
import pytz
def get_localtime(utctime):
utc = utctime.replace(tzinfo=pytz.UTC)
localtz = utc.astimezone(timezone.get_current_timezone())
return localtz
现在可以了
now = get_localtime(datetime.now())
p = People(name='foo', lastname='bar', _date=now)
p.save()