You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DRF中UTC时间格式验证:强制用户输入指定UTC格式

解决DRF序列化器DateTimeField强制UTC格式的问题

嗨,我来帮你搞定这个问题!你遇到的错误是因为input_formats里的格式字符串用错了——你写的YYYY-MM-DDThh:mm:ssZ是占位符样式,而DRF需要的是Python datetime模块支持的strftime格式符号。

正确的设置方式

把input_formats里的格式改成Python认可的格式字符串就行,针对你想要的2018-04-16T14:18:15Z格式,对应的字符串是'%Y-%m-%dT%H:%M:%SZ'。

直接上代码示例:

from rest_framework import serializers

class YourSerializer(serializers.ModelSerializer):  # 也可以用Serializer,根据你的场景选择
    end_date = serializers.DateTimeField(input_formats=['%Y-%m-%dT%H:%M:%SZ'])

    class Meta:
        model = YourModel
        fields = ['end_date', ...]

额外补充:支持带毫秒的UTC格式

如果你的场景还需要接受带毫秒的格式(比如2018-04-16T14:18:15.123Z),可以把对应的格式也加入input_formats列表:

end_date = serializers.DateTimeField(
    input_formats=['%Y-%m-%dT%H:%M:%SZ', '%Y-%m-%dT%H:%M:%S.%fZ']
)

为什么之前会报错?

DRF默认的DateTimeField格式包含了带时区偏移的样式(比如+HH:MM),但你想要强制用户输入带Z后缀的UTC时间,必须明确指定input_formats。之前错误的格式字符串让DRF无法识别你要的规则,所以返回了默认的格式提示。

现在设置正确的格式后,当用户输入不符合指定格式的时间时,错误提示就会显示你要求的格式规则了。

内容的提问来源于stack exchange,提问作者Anish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:08:18