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

时间:2018-01-13 04:09:10

标签: datetime rust timestamp

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

Utc::now()

如何将Utc::now()转换为NaiveDateTime

1 个答案:

答案 0 :(得分:9)

Utc::now()返回DateTime<Utc>。您可以点击documentation of DateTime<T>并搜索NaiveDateTime。您应该会发现有两种方法会返回NaiveDateTime

  

fn naive_utc(&self) -> NaiveDateTime

     

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

  

fn naive_local(&self) -> NaiveDateTime

     

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

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

let naive_date_time = Utc::now().naive_utc();

请注意,由于您使用的是diesel,因此您可以使用diesel::dsl::now代替SQL CURRENT_TIMESTAMP

//! ```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");
}