我有一个模型,其中定义了日期时间类型字段,如下所示:
class DamBaseModel(BaseModel):
class Config:
allow_population_by_field_name = True
use_enum_values = True
arbitrary_types_allowed = True
json_encoders = {
ObjectId: str,
datetime: lambda d: d.isoformat
}
定义的模型如下:
class Message(DamBaseModel):
created_datetime: datetime = Field(default_factory=datetime.now)
插入MongoDb的数据是:
{ "created_datetime" : ISODate("2022-08-22T12:02:59.546Z") }
但iam目前面临的问题是,数据是在客户端级别以以下格式接收的:
{ "created_datetime": "Mon, 22 Aug 2022 12:02:59 GMT" }
我只是从数据库中获取数据并直接投影,不需要任何格式。关于如何在投影数据时指定本地时区,有什么帮助吗??
我知道这是一个老问题,但我想为任何可能偶然发现这条线索的人发布一个答案。
截至2023年2月22日,pydantic中不支持时区感知datetime
。
但这一功能正处于发展的最新阶段。有关最新进展更新,请参阅以下链接:
https://github.com/pydantic/pydantic/discussions/3477#discussioncomment-4017542https://github.com/pydantic/pydantic/pull/4812
更新(2023年6月26日(
根据我上面提到的拉取请求中的最新评论,在Pydanticv2发布之前,此功能将不可用。
Pydantic V2:现在支持时区感知时间戳
from pydantic import AwareDatetime, TypeAdapter
dt = AwareDatetime
ta = TypeAdapter(dt)
# validate UTC timestamp
ta.validate_python("2022-08-22T12:02:59.546Z")
# Validate timestamp with timezone
ta.validate_python("2022-08-22T12:02:59.546+00:00")