在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"
我想也许它与时区有关,但不知道如何解决它.请帮忙!
您正在存储日期时间对象,而不仅仅是日期.这意味着您的当地时区的时间设置为午夜.在UTC时区中再次检索datetime对象,这对您来说是6个小时的休息时间.
使用时区存储datetime对象:
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
对象没有与之关联的时区.