#18 Rustで学ぶ日付と時刻の扱いの基本
Rustの標準ライブラリには、日付を手軽に扱う機能があまり用意されておらず、`chrono`という外部ライブラリ(クレート)を使うのが一般的です。この記事では、Rustにおける日付の基本的な扱い方と、実務で気をつけたいポイントを解説します。
chronoを使う
以前の記事で触れた`Cargo.toml`に、`chrono`を追加します。
[dependencies]
chrono = "0.4"
use chrono::Local;
let now = Local::now();
println!("{}", now);
日付を文字列にする
println!("{}", now.format("%Y年%m月%d日"));
println!("{}", now.format("%H:%M:%S"));
`format`に渡す書式指定子は`strftime`系のライブラリ(PythonやRuby)とよく似ているため、他言語の経験があれば覚えやすいはずです。
文字列から日付に変換する
逆に文字列から日時を作りたい場合は、`NaiveDateTime::parse_from_str`などを使います。
use chrono::NaiveDate;
let d = NaiveDate::parse_from_str("2026-08-18", "%Y-%m-%d").unwrap();
println!("{}", d);
Rustらしく、変換に失敗する可能性のある処理は`Result`型を返すため、`unwrap()`で強制的に取り出すか、`match`や`if let`でエラーを丁寧にハンドリングするかを選べます。実務では入力値の妥当性が保証できない場合、`unwrap()`せず適切にエラー処理することが推奨されます。
日付を計算する
use chrono::Duration;
let three_days_later = now + Duration::days(3);
`Duration`型を使うことで、日数だけでなく時間・分・秒単位の加減算も同じ書き方で扱えます。
Rustならではの注意点
実行速度と安全性を重視するRustは、標準ライブラリに何でも詰め込むのではなく、必要な機能は外部ライブラリとして提供するという設計方針を取っています。日付操作もその一例で、`chrono`のような信頼されているクレートを使うのが一般的な流れです。また、`chrono`にはタイムゾーンを扱わない`NaiveDateTime`と、タイムゾーン情報を持つ`DateTime
まとめ
Rustの日付操作は、標準では最小限しか用意されておらず、`chrono`のような外部クレートを使うのが基本です。文字列との相互変換には`format`と`parse_from_str`、計算には`Duration`を使い、エラー処理は`Result`型を意識して丁寧に行いましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿