在pydantic日期时间字段[Python]中指定时区



我有一个模型,其中定义了日期时间类型字段,如下所示:

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")

最新更新