data
validation_error
ai_generated
true
JSON Schema validation fails: format 'date-time' rejects valid ISO 8601 timestamps with timezone offset
ID: data/json-schema-format-date-time-ambiguity
85%Fix Rate
83%Confidence
1Evidence
2023-08-12First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| ajv 6.12.6 | active | — | — | — |
| jsonschema 4.17.3 | active | — | — | — |
| json-schema-validator 4.0.1 | active | — | — | — |
Root Cause
JSON Schema's 'date-time' format in some validators (e.g., older versions of ajv) requires timestamps to end with 'Z' (UTC) and rejects valid ISO 8601 offsets like '+05:30' or '-08:00'.
generic中文
某些验证器(如旧版 ajv)中 JSON Schema 的 'date-time' 格式要求时间戳以 'Z'(UTC)结尾,拒绝像 '+05:30' 或 '-08:00' 这样的合法 ISO 8601 偏移。
Official Documentation
https://json-schema.org/understanding-json-schema/reference/string.html#dates-and-timesWorkarounds
-
90% success Update to a newer validator version that supports RFC 3339 full format: npm install [email protected] (for JavaScript) or pip install jsonschema[format-nongpl] (for Python, which uses rfc3339-validator).
Update to a newer validator version that supports RFC 3339 full format: npm install [email protected] (for JavaScript) or pip install jsonschema[format-nongpl] (for Python, which uses rfc3339-validator).
-
85% success Use a custom format validator that accepts all ISO 8601 timezone offsets. Example in Python: from jsonschema import validators; from rfc3339_validator import validate_rfc3339; validator = validators.validate(..., format_checker=validators.Draft7Validator.FORMAT_CHECKER.replaces('date-time', lambda instance: validate_rfc3339(instance)))
Use a custom format validator that accepts all ISO 8601 timezone offsets. Example in Python: from jsonschema import validators; from rfc3339_validator import validate_rfc3339; validator = validators.validate(..., format_checker=validators.Draft7Validator.FORMAT_CHECKER.replaces('date-time', lambda instance: validate_rfc3339(instance)))
中文步骤
Update to a newer validator version that supports RFC 3339 full format: npm install [email protected] (for JavaScript) or pip install jsonschema[format-nongpl] (for Python, which uses rfc3339-validator).
Use a custom format validator that accepts all ISO 8601 timezone offsets. Example in Python: from jsonschema import validators; from rfc3339_validator import validate_rfc3339; validator = validators.validate(..., format_checker=validators.Draft7Validator.FORMAT_CHECKER.replaces('date-time', lambda instance: validate_rfc3339(instance)))
Dead Ends
Common approaches that don't work:
-
60% fail
Changes the data value, potentially breaking downstream timezone-sensitive logic. Also requires modifying the data source, which may not always be feasible.
-
75% fail
Validates only the date part, ignoring time entirely, which may not meet the schema's intent.