| 123456789101112131415161718192021222324252627 |
- """运输计划相关日期时间解析:前端 date-picker 仅传 YYYY-MM-DD。"""
- from __future__ import annotations
- from datetime import date, datetime, time
- from typing import Annotated, Optional
- from pydantic import BeforeValidator
- def parse_optional_plan_datetime(value: object) -> Optional[datetime]:
- if value is None:
- return None
- if isinstance(value, datetime):
- return value
- if isinstance(value, date):
- return datetime.combine(value, time.min)
- if isinstance(value, str):
- text = value.strip()
- if not text:
- return None
- if len(text) == 10 and text[4] == "-" and text[7] == "-":
- return datetime.strptime(text, "%Y-%m-%d")
- return datetime.fromisoformat(text.replace("Z", "+00:00"))
- raise ValueError("invalid datetime")
- OptionalPlanDateTime = Annotated[Optional[datetime], BeforeValidator(parse_optional_plan_datetime)]
|