python - 如何在 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_dt
unix时间戳。但是在端点中,它们成为带有时区的日期时间。
@app.put('...')
def edit_event(event_data: EventEditRequest):
event_data.start_dt.tzinfo is not None # True
我不想手动编辑start_dt
并end_dt
在端点函数中摆脱时区。如何设置我的 pydantic 模型,以便在没有时区的情况下生成日期时间?
解决方案
您可以使用自己的@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)
推荐阅读
- firebase - Firebase 数据库关系问题 - 为用户存储选定的项目
- c# - 将数组排序合并为一个?
- javascript - Google Chrome 扩展程序“无法读取未定义的属性‘本地’”
- github - 我的 sublime 中的缩进文件在 github 文件上没有正确缩进
- mathematical-optimization - 如何识别非 PSD 二次程序 (QP) 中的所有最小值?
- github - 尊重换行符的 Github 降价
- c# - SQL 错误:不存在到已知托管提供程序类型的映射
- python - __init__ 使用方法 v lambda
- d3.js - Cross Hairs 组件抛出错误,特定于数据集?
- c# - C#无法加入主线程