{"id":575,"library":"rfc3339-validator","title":"RFC3339 Validator","description":"rfc3339-validator is a lightweight, pure Python library designed for strictly validating date-time strings against the RFC 3339 Internet Date/Time Format specification. Currently at version 0.1.4, its last release was in May 2021, indicating a mature, low-cadence project that provides a focused utility for ensuring RFC 3339 compliance in applications requiring precise time formatting, such as web APIs and data serialization.","status":"active","version":"0.1.4","language":"python","source_language":"en","source_url":"https://github.com/naimetti/rfc3339-validator","tags":["rfc3339","validator","datetime","validation","date-time","time"],"install":[{"cmd":"pip install rfc3339-validator","lang":"bash","label":"Install with pip"}],"dependencies":[],"imports":[{"note":"The primary validation function is named `validate_rfc3339`, not a generic `validate`.","wrong":"from rfc3339_validator import validate","symbol":"validate_rfc3339","correct":"from rfc3339_validator import validate_rfc3339"}],"quickstart":{"code":"from rfc3339_validator import validate_rfc3339\n\n# Valid RFC3339 datetime\nprint(validate_rfc3339('2001-10-23T15:32:12.9023368Z'))\n# Invalid RFC3339 datetime\nprint(validate_rfc3339('1424-45-93T15:32:12.9023368Z'))\n# Another valid example with offset\nprint(validate_rfc3339('2023-09-24T15:30:00+09:00'))\n# Invalid: missing timezone/offset, RFC3339 requires it\nprint(validate_rfc3339('2023-09-24T15:30:00'))","lang":"python","description":"The library provides a single, straightforward function, `validate_rfc3339`, which takes a string and returns `True` if it conforms to the RFC 3339 specification, and `False` otherwise. RFC 3339 strictly requires a timezone offset (e.g., '+09:00', '-05:00') or 'Z' for UTC."},"warnings":[{"fix":"Ensure all date-time strings conform precisely to RFC 3339, including the 'T' separator and a mandatory timezone offset (e.g., '+00:00', '-05:00', or 'Z' for UTC).","message":"RFC 3339 is a strict profile of ISO 8601. This validator enforces strict compliance, meaning common deviations like using a space instead of 'T' between date and time, or omitting timezone information (offset or 'Z'), will result in validation failure.","severity":"gotcha","affected_versions":"All versions"},{"fix":"For applications requiring leap second awareness, additional, specialized logic or libraries would be necessary beyond standard RFC 3339 validation.","message":"The library does not support validation or handling of leap seconds. As standard timestamps do not generally account for leap seconds, RFC 3339 validators typically do not either. This is a characteristic of the standard itself.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always use timezone-aware `datetime` objects, preferably `timezone.utc` or `datetime.now(timezone.utc)`, and ensure output formatting includes the correct offset or 'Z' when constructing RFC 3339 strings to be validated.","message":"While Python's `datetime` objects can be used for RFC 3339 representation, improper handling of timezones (e.g., naive datetimes or incorrectly applied local timezones) can lead to invalid RFC 3339 strings, as RFC 3339 strictly requires an explicit UTC offset or 'Z'.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T16:14:32.691Z","next_check":"2026-06-26T00:00:00.000Z","problems":[{"fix":"Run `pip install rfc3339-validator` to install the library.","cause":"The rfc3339-validator library has not been installed, or the Python environment where the code is run does not have access to it.","error":"ModuleNotFoundError: No module named 'rfc3339_validator'"},{"fix":"Use the correct function name: `from rfc3339_validator import validate_rfc3339`","cause":"The user is attempting to import a function named `validate` from the module, but the correct function name for validation is `validate_rfc3339`.","error":"ImportError: cannot import name 'validate' from 'rfc3339_validator'"},{"fix":"Call the correct validation function: `rfc3339_validator.validate_rfc3339(date_string)`","cause":"After importing the `rfc3339_validator` module, the user is attempting to call a method named `validate` which does not exist; the correct function name is `validate_rfc3339`.","error":"AttributeError: module 'rfc3339_validator' has no attribute 'validate'"},{"fix":"Ensure that the argument passed to `validate_rfc3339` is always a string. Convert non-string inputs to strings before validation, for example: `validate_rfc3339(str(value))`.","cause":"The `validate_rfc3339` function expects a string as its argument, but it received a different data type (e.g., int, float, or None).","error":"TypeError: expected string, got <type>"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":"0.1.4","install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.1,"disk_size":"17.9M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.1,"disk_size":"17.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.01,"mem_mb":1.1,"disk_size":"18M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.01,"mem_mb":1.1,"disk_size":"18M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"19.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.3,"disk_size":"19.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.6,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"20M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.3,"disk_size":"20M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.6,"disk_size":"11.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.6,"disk_size":"11.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.02,"mem_mb":0.6,"disk_size":"12M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.6,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.7,"disk_size":"11.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.7,"disk_size":"11.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.5,"import_time_s":0.02,"mem_mb":0.5,"disk_size":"12M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":0.5,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"17.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"17.4M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":" $EXIT -eq 0 ","exit_code":0,"wheel_type":"wheel","failure_reason":null,"install_time_s":1.8,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"18M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.4,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}