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>>
である
日付が正しい場合はsingle
がSome<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通りに定まらない場合、single
はNone
を返す
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
ではなくearliest
、latest
というメソッドでそれぞれの日時を取得できる
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