首页 > 解决方案 > 如何在 Fast API 中将 unix 时间戳解析为没有时区的日期时间

问题描述

假设我有一个 pydantic 模型

class EventEditRequest(BaseModel):
    uid: UUID
    name: str
    start_dt: datetime
    end_dt: datetime

我用正文发送请求b'{"uid":"a38a7543-20ca-4a50-ab4e-e6a3ae379d3c","name":"test event2222","start_dt":1600414328,"end_dt":1600450327}'

所以两者start_dt都是end_dtunix时间戳。但是在端点中,它们成为带有时区的日期时间。

@app.put('...')
def edit_event(event_data: EventEditRequest):
    event_data.start_dt.tzinfo is not None  # True

我不想手动编辑start_dtend_dt在端点函数中摆脱时区。如何设置我的 pydantic 模型,以便在没有时区的情况下生成日期时间?

标签: pythonpython-datetimefastapipydantic

解决方案


您可以使用自己的@validator手动解析datetime

from datetime import datetime

from pydantic import BaseModel, validator


class Model(BaseModel):
    dt: datetime = None


class ModelNaiveDt(BaseModel):
    dt: datetime = None

    @validator("dt", pre=True)
    def dt_validate(cls, dt):
        return datetime.fromtimestamp(dt)


print(Model(dt=1600414328))
print(ModelNaiveDt(dt=1600414328))

输出:

dt=datetime.datetime(2020, 9, 18, 7, 32, 8, tzinfo=datetime.timezone.utc)
dt=datetime.datetime(2020, 9, 18, 10, 32, 8)

推荐阅读