如何将DateTime :: now()转换为NaiveDateTime?

Kur*_*ama 9 datetime timestamp rust

我正在使用Diesel和chrono.在我的模型中,我有一个NaiveDateTime包含类型的字段now().但是,NaiveDateTime没有功能now()或类似功能,DateTime而是:

Utc::now()
Run Code Online (Sandbox Code Playgroud)

我该如何转换Utc::now()NaiveDateTime

ken*_*ytm 14

Utc::now()返回一个DateTime<Utc>.您可以单击文档DateTime<T>并搜索NaiveDateTime.您应该会发现有两种方法可以返回NaiveDateTime:

fn naive_utc(&self) -> NaiveDateTime

  返回天真的UTC日期时间的视图.

fn naive_local(&self) -> NaiveDateTime

  返回天真本地日期时间的视图.

例如,如果您需要UTC中的时间戳:

let naive_date_time = Utc::now().naive_utc();
Run Code Online (Sandbox Code Playgroud)

请注意,既然您正在使用diesel,您可以使用diesel::dsl::now,它将CURRENT_TIMESTAMP在SQL端进行评估.

//! ```cargo
//! [dependencies]
//! diesel = { version = "1", features = ["sqlite"] }
//! ```

#[macro_use]
extern crate diesel;

use diesel::prelude::*;
use diesel::dsl;

table! {
    posts (id) {
        id -> Integer,
        content -> Text,
        published -> Timestamp,
    }
}

fn main() {
    let conn = SqliteConnection::establish("test.db")
        .expect("Cannot open database");

    diesel::insert_into(posts::table)
        .values((
            posts::content.eq("hello"),
            posts::published.eq(dsl::now),  // <------------------
        ))
        .execute(&conn)
        .expect("Insertion failed");
}
Run Code Online (Sandbox Code Playgroud)

  • +1指出使用数据库作为时间源是更好的主意,尤其是当您有多台计算机(具有不同的时间源)连接到一个数据库时。 (2认同)