ユーザ用ツール

サイト用ツール


rust:chrono

文書の過去の版を表示しています。


Chrono

Rustで日付・時刻を扱うライブラリ、事実上スタンダードになっている。タイムゾーンを扱う場合はchrono-tzを使う

設定

Cargo.tomlに追加

[dependencies]
chrono = "0.4"
chrono-tz = "0.6"

現在日時の取得

ローカルタイムゾーンで現在日時を取得

use chrono::Local;
 
let dt: DateTime<Local> = Local::now();
println!("{}", dt);

指定時刻の取得

年月日時分秒を指定してDateTimeを取得

use chrono::{Local, TimeZone};
 
let result = Local.with_ymd_and_hms(2022, 7, 5, 10, 14, 31);

use chrono::TimeZone が必要なことに注意。また、取得されるのはDateTimeではなく、LocalResult<Option<DateTime>> である

日付が正しい場合はsingleSome<DateTime>を返す

let dt = Local.with_ymd_and_hms(2022, 7, 5, 10, 14, 31).single();
println!("{}", dt.unwrap());  // 2022-07-05 10:14:31 +09:00

日付指定が不正な場合や、日付が1通りに定まらない場合、singleNoneを返す

let dt = Local.with_ymd_and_hms(2022, 7, 5, 90, 14, 31).single();
println!("{}", dt.is_none());  // true

アメリカ東海岸では夏時間の終了によって2023年11月5日1時30分という日時が2回発生するため1通りに定まらない

let dt = chrono_tz::America::New_York.with_ymd_and_hms(2023, 11, 5, 1, 30, 0).single();
println!("{}", dt.is_none());  // true

このような場合はsingleではなくearliestlatestというメソッドでそれぞれの日時を取得できる

let result = chrono_tz::America::New_York.with_ymd_and_hms(2023, 11, 5, 1, 30, 0);
 
println!("{}", result.earliest().unwrap()); // 2023-11-05 01:30:00 EDT
println!("{}", result.latest().unwrap());   // 2023-11-05 01:30:00 EST

matchで切り分けも可能

let result = Local.with_ymd_and_hms(2022, 7, 5, 10, 14, 31);
match result {
    LocalResult::Single(dt) => println!("{}", dt),   
    LocalResult::Ambiguous(dt1, dt2) => println!("{} {}", dt1, dt2),
    LocalResult::None => println!("invalid date")
}
rust/chrono.1673177594.txt.gz · 最終更新: 2023/01/08 11:33 by nullpon