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

SrT*_*Tan 4 python datetime mongodb python-3.x pydantic

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

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
        }
Run Code Online (Sandbox Code Playgroud)

定义的Model如下:

class Message(DamBaseModel):
    created_datetime: datetime = Field(default_factory=datetime.now)
Run Code Online (Sandbox Code Playgroud)

插入 MongoDb 的数据是:

{ "created_datetime" : ISODate("2022-08-22T12:02:59.546Z") }
Run Code Online (Sandbox Code Playgroud)

但我目前面临的问题是在客户端级别接收的数据格式如下:

{ "created_datetime": "Mon, 22 Aug 2022 12:02:59 GMT" }
Run Code Online (Sandbox Code Playgroud)

我只是从数据库中获取数据并直接投影,无需任何格式化。有关如何在投影数据时指定本地时区的任何帮助吗?

Yaa*_*ler 7

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")
Run Code Online (Sandbox Code Playgroud)


ovi*_*unt 5

我知道这是一个老问题,但我想为任何可能偶然发现这个帖子的人发布一个答案。

截至目前 - 2023 年 2 月 22 日 - datetimepydantic 不支持时区感知。

但此功能正处于开发的最新阶段。请参阅以下链接了解最新进展更新:

https://github.com/pydantic/pydantic/discussions/3477#discussioncomment-4017542 https://github.com/pydantic/pydantic/pull/4812

更新(2023 年 6 月 26 日)

根据我上面提到的 Pull request 中的最新评论,这个功能要等到 Pydantic v2 出来之后才能使用。