日期时间字符串在 strftime() 和 strptime() 之后不匹配



在 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对象没有与之关联的时区。

相关内容

  • 没有找到相关文章

最新更新