Rustでchronoクレートを試してみた
はじめに
この記事では、「Rustでchronoクレートの概要と基本的な使い方」について書いています。
Rustの勉強の一環として色々なクレートを触ってみようと思い、今回はchronoクレートについて調べてみました。
自分に向けた備忘録でもありますが、「Rustでchronoクレートってどんなもの?」や「Rustで日時などを扱いたい」な人の一助になれば嬉しいです。
chronoクレートとは何か
- 時刻やタイムゾーンの取得や計算を行う
- Rustで日時を扱う時のデファクトスタンダード
- 標準ライブラリにも無くはない(
std::time
)が機能が少ないみたい
- 標準ライブラリにも無くはない(
前提(環境)
以下の環境で実験をしていきます。
- OS: Windows 10
- Rust: 1.64.0
chronoクレートを使ってみる
まずはchronoクレートを使えるようにするため、Cargo.toml
に依存関係を追加します。
...(省略) [dependencies] chrono = "0.4.23"
現在日時を取得する
現在日時はUTC(協定世界時)とローカル時刻の2種類取得することができ、以下のように行います。
// use chrono::{Local, Utc}; が必要 // 現在日時(協定世界時 (UTC))を取得する。 let dt_utc = Utc::now(); println!("{}", dt_utc); // 現在日時(実行しているPCのローカル時刻)を取得する。 let dt_local = Local::now(); println!("{}", dt_local);
この時の出力は以下のようになります。
2022-11-13 10:28:40.190246700 +09:00 2022-11-13 01:28:40.193508400 UTC
出力のフォーマットを、例えば「xx年xx月xx日」のようにしたい場合はformatメソッドを使い、
println!("{}", dt_local.format("%Y年%m月%d日 %H:%M:%S"));
と書くことで実現できます。(詳細は以下のサイトに記載があります)
https://docs.rs/chrono/0.4.6/chrono/format/strftime/index.html
日時に時間を加算減算する
Duration
を使うことで実現ができ、以下のように使います。
// use chrono::{Duration, Local}; が必要 let dt_local_tomorrow = dt_local + Duration::days(1); println!("{}", dt_local_tomorrow);
2つの日時の差を計算する
下記のようにすることで日時の差を計算することもできます。
また、差のは「何日」の形だったり「何時間」の形だったり様々な形式で出力することができます。
// use chrono::{Duration, Local}; が必要 let duration: Duration = dt_local_tomorrow - dt_local; println!("days: {}", duration.num_days()); println!("hours: {}", duration.num_hours());
おわりに
「Rustでchronoクレートの概要と基本的な使い方」について解説しました。
chronoクレートを用いることで日時の取得や計算が簡単に行えるようになります。
さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。