Kotlinで日付の差分を計算する方法

目次

  1. 背景
  2. ChronoUnitを使用する
  3. Chronounitの時間単位
  4. まとめ
  5. 関連記事
  6. おすすめ書籍

背景

こんにちは。 かりんとうマニア(@karintozuki)です。
今回はKotlinで二つの日付、LocalDateTimeを比較する方法を紹介します。

ChronoUnitを使用する

KotlinにはChronoUnitというクラスがあるので、
それを利用していきましょう。

現在時から午後10時まで何分あるかを計算するプログラムを書いてみます。

Compare.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit

// 現在時刻の取得
val now = LocalDateTime.now()
println(now) // 2020-10-06T21:26:58.536212

// 10:00PMのLocalDateTimeを作成
val dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
val target = LocalDateTime.parse("2020/10/06 22:00:00", dtf)

// 差分を計算
val minutes: Long = ChronoUnit.MINUTES.between(LocalDateTime.now(), target)

print(minutes) // 結果: 33

特解解説も必要ないかと思いますが、
ChronoUnit.{時間の単位}.between(時間1, 時間2)
とすることで時間の差分が計算できます。

Chronounitの時間単位

時間の単位として、ChronoUnit Classに以下のようなものが用意されています。

メンバ名 単位
NANOS ナノ秒
MICROS マイクロ秒
MILLIS ミリ秒
SECONDS
MINUTES
HOURS 時間
HALF_DAYS 12時間
DAYS
MONTHS
YEARS
DECADES 10年
CENTURIES 100年
MILLENNIA 1000年
ERAS 10億年
FOREVER そして永遠へ。。。

DECADES以降はそうそう使わないと思うけど
なんか面白いですね。
ちなみにFOREVERは2.92277266 × 10^11年(3千億年くらい)として定義されているらしいです。
参考:Java 9. Where “forever” is hard coded.

まとめ

今回はKotlinでの日付の比較について紹介しました。

それじゃ今日はこの辺で。

関連記事

こちらの記事もおすすめ。

Kotlinで日付をフォーマットする方法
アプリ未経験エンジニアが独学で個人開発Androidアプリを公開するまでにやったこと

おすすめ書籍