内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
•
tag
•
tt
•
sqs
rust:chrono
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
<markdown> # Chrono Rustで日付・時刻を扱うライブラリ、事実上スタンダードになっている。タイムゾーンを扱う場合はchrono-tzを使う ## 設定 Cargo.tomlに追加 ```toml [dependencies] chrono = "0.4" chrono-tz = "0.6" ``` ## 現在日時の取得 ローカルタイムゾーンで現在日時を取得 ```rust use chrono::Local; let dt: DateTime<Local> = Local::now(); println!("{}", dt); ``` ## 指定時刻の取得 年月日時分秒を指定してDateTimeを取得 ```rust 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>`を返す ```rust 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`を返す ```rust 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通りに定まらない ```rust 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`というメソッドでそれぞれの日時を取得できる ```rust 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で切り分けも可能 ```rust 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") } ``` ちなみに過去の日本でもGHQ占領下でサマータイム制が施行されている(1948〜1951年) ``` let result = chrono_tz::Asia::Tokyo.with_ymd_and_hms(1951, 5, 6, 0, 30, 0); match result { LocalResult::Single(dt) => println!("{}", dt), LocalResult::Ambiguous(dt1, dt2) => println!("{} {}", dt1, dt2), LocalResult::None => println!("invalid date") } let result = chrono_tz::Asia::Tokyo.with_ymd_and_hms(1951, 9, 9, 0, 30, 0); match result { LocalResult::Single(dt) => println!("{}", dt), LocalResult::Ambiguous(dt1, dt2) => println!("{} {}", dt1, dt2), LocalResult::None => println!("invalid date") } ``` ``` invalid date 1951-09-09 00:30:00 JDT 1951-09-09 00:30:00 JST ``` </markdown>
rust/chrono.txt
· 最終更新: 2023/02/22 08:27 by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ