如何强制FastAPI返回指定格式的DateTime?
解决FastAPI返回自定义日期格式的问题
可以强制FastAPI返回仅包含日期+时分秒的格式(如YYYY-MM-DD HH:MM:SS),下面是两种实用的实现方式:
方法一:为Pydantic模型字段自定义序列化逻辑
在响应模型中,针对datetime字段编写专属的序列化函数,精准控制输出格式:
from datetime import datetime from pydantic import BaseModel, field_serializer class CustomResponse(BaseModel): update_time: datetime @field_serializer('update_time') def format_datetime(self, value: datetime) -> str: return value.strftime("%Y-%m-%d %H:%M:%S")
当接口返回该模型实例时,update_time字段会自动按照指定格式输出。
方法二:全局配置自定义JSON编码器
如果需要让所有接口的datetime字段统一使用该格式,可以替换FastAPI默认的JSON编码器:
from datetime import datetime from fastapi import FastAPI from fastapi.encoders import jsonable_encoder from typing import Any def custom_encoder(obj: Any) -> Any: if isinstance(obj, datetime): return obj.strftime("%Y-%m-%d %H:%M:%S") return jsonable_encoder(obj) app = FastAPI(json_encoder=custom_encoder) @app.get("/demo") def return_demo_data(): return {"create_time": datetime.now()}
这种方式无需逐个修改模型,所有返回的datetime类型都会自动套用指定格式。
注意:如果你的datetime对象带有时区信息,建议先转换为目标时区(如UTC或本地时间)后再格式化,避免出现时间偏差。
内容的提问来源于stack exchange,提问作者Siqueler
相关产品推荐
相关产品推荐

