【问题标题】:Django REST DateTimeField adds 0000+00:00 to datetime objectDjango REST DateTimeField 将 0000+00:00 添加到日期时间对象
【发布时间】:2021-12-01 12:32:47
【问题描述】:

我正在做一个项目,我有一个带有 2 个 DateTimeFields 的序列化程序:

createdAt = serializers.DateTimeField(required=True,format='%Y-%m-%dT%H:%M:%S.%fZ')

updatedAt = serializers.DateTimeField(required=True,allow_null=True,format='%Y-%m-%dT%H:%M:%S.%fZ')

这两个字段的输入数据是:

"createdAt": datetime.strptime("2021-06-22T11:17:09.460Z", '%Y-%m-%dT%H:%M:%S.%fZ'),

"updatedAt": datetime.strptime("2021-06-24T06:50:58.030Z", '%Y-%m-%dT%H:%M:%S.%fZ'),

但是,事情并不顺利,因为当我检查验证数据时,这些字段具有以下结构:

createdAt: 2021-06-22 11:17:09.460000+00:00

updatedAt: 2021-06-24 06:50:58.030000+00:00

添加这 4 个零和 +00:00 有什么原因吗?我已经检查了有关此的文档,甚至是 Wikipedia 中的 ISO-8601,但我无法找到有关为什么会发生这种情况的线索。

提前致谢。

【问题讨论】:

    标签: python django-rest-framework python-datetime


    【解决方案1】:

    我猜你在序列化器字段中设置的日期时间格式用于以字符串格式表示日期(换句话说,这是 Django 将时间戳转换为字符串表示形式,由 API 返回的方式。

    当您提到validated_data 时,这意味着您正在查看转换的相反方向——时间戳的字符串表示被转换为实际的时间戳。

    2021-06-22 11:17:09.460000+00:00 看起来像一个实际的时间戳,用 Python 打印。微秒和时区偏移有 6 个数字。

    我会检查这个值的类型,可能它甚至不是一个字符串,而是一个日期时间实例。

    【讨论】:

    • 嗨,Igor Pomaranskiy,是的,它是验证数据中的日期时间。我不明白的是为什么输入字段是这样的,即使我使用 datetime.strptime 进行了转换
    • @JavierRomero。因为您使用DateTimeField,它反过来将值转换为数据时间实例。顺便说一句,这完全没问题,我不清楚你为什么要为此烦恼。
    • 出于某种原因,客户希望这样并指定它应该是 2021-06-28T09:00:00.000Z 并且仍然是日期时间格式,这就是原因
    • @JavierRomero。没关系。当您的序列化程序将 返回 数据时,它将完全采用您在字段设置中设置的格式。但在数据库方面,它应该存储为普通的日期时间。所以我认为没有理由为掩饰而烦恼。
    • 我与项目经理交谈,他们发现文档中关于我们应该如何在内部使用它的错误。非常感谢您的解释,我完全是 Django REST 的菜鸟,对此我一无所知。
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2013-07-12
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多