#postgresql #timezone #tz #chrono #chrono-tz

chrono-tz-postgres

Rust 和 PostgreSQL 中的类型化时区

5 个版本

0.8.1 2022 年 12 月 2 日
0.1.3 2022 年 11 月 8 日
0.1.2 2022 年 11 月 3 日
0.1.1 2022 年 11 月 1 日
0.1.0 2022 年 11 月 1 日

日期和时间 中排名第 383

MIT 许可证

140KB
3K SLoC

Rust 2.5K SLoC SQL 598 SLoC

chrono-tz-postgres

crates.io Released API docs msrv 1.60

一种可以转换为自定义 PostgreSQL 类型的时区类型。这允许你在 PostgreSQL 中使用类型化时区。

自定义 PostgreSQL 枚举 tz 等同于 Rust 枚举 chrono_tz::Tz。它可以在 此处 找到。

版本号与 chrono-tz 相同。

chrono-tz-postgres 应用示例

use chrono_tz::Tz;
use chrono_tz_postgres::TzPg;
use postgres::{Client, NoTls};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // We can convert between Tz and TzPg
    let tz = Tz::Arctic__Longyearbyen;
    let tzpg = TzPg::from(tz);
    let tz: Tz = tzpg.into();
    println!("{}", tz);

    // Tz can be serialized, unlike TzPg
    serde_json::to_string(&tz)?;

    // but TzPg can interface with Postgres
    let mut client = Client::connect("host=localhost user=postgres", NoTls)?;

    // timezone the column name, whose type is `tz`
    // `tz` is a custom Postgres type
    let row = client.query_one("SELECT timezone FROM foo LIMIT 1", &[])?;
    let tz: TzPg = row.get(0);

    // Convert back to Tz to do more
    let tz: Tz = tz.into();
    println!("{}", tz);

    Ok(())
}

依赖项

~4.5–6MB
~131K SLoC