やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Rust自習(日時 2 chrono)

 文字列との相互変換。

成果物

コード

parse_from_rfc3339, to_rfc3339

use chrono::prelude::*;
fn main() {
    let local: DateTime<Local> = Local::now();
    println!("{}", local);

    println!("{}", local.format("%Y-%m-%d %H:%M:%S").to_string());
    println!("{}", local.to_rfc3339());

    let dt = DateTime::parse_from_rfc3339(local.to_rfc3339().as_str());
    println!("{}", dt.unwrap().to_rfc3339());
} 
2019-07-25 14:13:56.543161995 +09:00
2019-07-25 14:13:56
2019-07-25T14:13:56.543161995+09:00
2019-07-25T14:13:56.543161995+09:00

parse_from_str

//    let dt = DateTime::parse_from_str("2000-01-02 03:04:05", "%Y-%m-%d %H:%M:%S"); // thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseError(NotEnough)'
    let dt = DateTime::parse_from_str("2000-01-02 03:04:05 +09:00", "%Y-%m-%d %H:%M:%S %z");
    println!("{}", dt.unwrap());
    println!("{:?}", dt.unwrap());
2000-01-02 03:04:05 +09:00
2000-01-02T03:04:05+09:00

 なんと、タイムゾーンがないとエラーになってしまう。指定がないときはデフォルトでローカルタイムゾーンにして欲しいのだが……。

 しかも{}{:?}で結果が変わる……。常に指定したフォーマットになってほしい。as_str()メソッドもないし。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux

前回まで