如何使用Diesel查询带有Unix时间戳的Timestamptz



我可以很容易地获得系统Unix毫秒时间戳,但如何将其转换为可以使用Diesel查询的内容?我的模式中的表有一个Timestampz字段(带时区的时间戳(,我需要将其与Unix时间戳进行比较。

use diesel::sql_types::Timestamptz;
fn main() {
let unix_time: i64 = 123456;
let time: Timestamptz = ???
}
[dependencies]
diesel = { version = "1.4.7", features = ["postgres"] }

Timestamptz可以根据文档从PgTimestampchrono::NaiveDateTimechrono::DateTime创建。

我不认为有一种直接的方法可以生成时间戳,而且在大多数情况下它应该是不透明的。相反,如果查询需要Timetamptz,则可以传递NaiveDateTime并加载回NaiveDateTime

现在我们使用NaiveDateTime,因为它是唯一可以从unix时间戳创建的。CCD_ 9需要明确的时区,并且可以从CCD_。

use chrono::NaiveDateTime;
fn main() {
let conn = get_connection();
let ndt = NaiveDateTime::from_timestamp(0, 42_000_000);
let (id, date) = users
// assume a "created" column being a Timestamptz
// you can just pass a NaiveDateTime.
.filter(created.gt(ndt)) 
.select((user_id, created))
// We load back a NaiveDateTime and never deal with Timestamptz directly.
.first::<(u64, NaiveDateTime)>(&conn)
.expect("query failed");
}

最新更新