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

 一个人的靓靓_523 发布于 2023-02-07 00:00

在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 个回答
  • 您正在存储日期时间对象,而不仅仅是日期.这意味着您的当地时区的时间设置为午夜.在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 对象没有与之关联的时区.

    2023-02-07 00:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有