在Django项目中,我将Datetime Field存储在数据库中。 我从网页获取日期字符串,并使用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"
我想也许它与时区有关,但不知道如何解决它。请帮忙!
答案 0 :(得分:6)
您正在存储日期时间对象,而不仅仅是日期。这意味着您的当地时区的时间设置为午夜。在UTC时区中再次检索datetime对象,这对你来说是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
个对象没有与之关联的时区。