Rustでchronoクレートを試してみた

はじめに

この記事では、「Rustでchronoクレートの概要と基本的な使い方」について書いています。

Rustの勉強の一環として色々なクレートを触ってみようと思い、今回はchronoクレートについて調べてみました。

自分に向けた備忘録でもありますが、「Rustでchronoクレートってどんなもの?」や「Rustで日時などを扱いたい」な人の一助になれば嬉しいです。

chronoクレートとは何か

前提(環境)

以下の環境で実験をしていきます。

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クレートを用いることで日時の取得や計算が簡単に行えるようになります。

さいごに、記事を書く上で参考にしたサイトのリンクを以下に掲載します。合わせて読んでいただくと良いかと思います。

https://qnighy.hatenablog.com/entry/2019/04/21/190000

https://qiita.com/fujitayy/items/ae6175118cbed7134594