1

我的移动客户端正在发送不准确的日期时间偏移信息。例如:

2019-05-03T17:55:12-0700

该时间实际上是正确的 UTC 时间,但偏移量应为-0000.

我目前无法修改客户端以纠正导致此问题的问题。所以我需要丢弃偏移量或将其更改为-0000.

在上面的示例中,对于将帐户时区设置设置为 PST 的此用户,它将日期存储validated_datadatetime.datetime(2019, 5, 4, 0, 55, 12, tzinfo=<UTC>)

如果同步了基于客户端的时间和偏移信息,则 DRF 的这种转换将是正确的,因为它是七个小时的时间或 PST + 当前 DST。(美国西海岸目前是-7:00 UTC)

问题是当我到达我的 ModelSerializer 类时,validated_data已经包含了 DRF 认为现在是正确的 UTC 时间。

在 POST 正文上更改此字段的适当位置在哪里,以便在 DRF 尝试创建 DateTime 时它会构建正确的时间戳?

4

1 回答 1

0

处理此问题的最简单方法是在将 DateTime 对象保存到模型字段之前对其进行修改。因此,在create()从 POST 正文中获取原始 ISO8601 字符串时,使用self.context['request'].data['created']. 然后用于dateutil.parser将字符串解析为 DateTime,并将时区替换为pytz.UTC.

import dateutil.parser

Class MySerializer(serializers.ModelSerializer):

...

    def create(self, validated_data):
         scan.created = dateutil.parser.parse(self.context['request'].data['created']).replace(tzinfo=pytz.UTC)

这不是一个光荣的修复,但在我可以发布更新的移动客户端之前一直有效。

于 2019-05-03T23:45:00.510 回答