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

时间:2014-01-02 17:26:21

标签: python django datetime timezone

在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"

我想也许它与时区有关,但不知道如何解决它。请帮忙!

1 个答案:

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