0

我有下一个模型:

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

4

2 回答 2

2

Django 使用时区存储DatetimeFields到您的数据库中。这就是您TIME_ZONE在设置中提供 a 的原因。

您可以在此处阅读有关此内容的更多信息: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

于 2012-10-31T23:02:29.577 回答
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()
于 2021-01-15T05:42:14.193 回答