在 Django 项目中,我在数据库中存储了一个 Datetime 字段。我从网页中获取日期字符串,并使用datetime.strptime()转换为datetime类型,并将其分配给DatetimeField。但是当我拿到字段并使用strftime获取字符串时,已经休息了一天,为什么会这样?
datestr = "2013-12-12";
expireDate = datetime.strptime(datestr, "%Y-%m-%d");
datamodel.time = expireDate;
datamodel.save();
# when I get the model in another method
expireDate = datamodel.time;
datestr = expireDate.strftime("%Y-%m-%d"); # I get "2013-12-11"
我想也许它与时区有关,但不知道如何解决它。请帮忙!
您正在存储日期时间对象,而不仅仅是日期。这意味着时间设置为本地时区的午夜。再次检索日期时间对象将改为使用 UTC 时区,这对您来说是 6 小时。
使用时区存储日期时间对象:
from django.utils.timezone import utc
datestr = "2013-12-12"
expireDate = datetime.strptime(datestr, "%Y-%m-%d")
datamodel.time = expireDate.replace(tzinfo=utc)
datamodel.save()
如果您只处理日期,您也可以切换到使用 DateField
而不是 DateTimeField
:
datestr = "2013-12-12"
expireDate = datetime.strptime(datestr, "%Y-%m-%d").date()
date
对象没有与之关联的时区。