Kotlin 日時を計算するサンプル(加算と減算)

Kotlinの日時を計算するサンプルです。加算と減算を行います。 

目次

計算 LocalDateTimeクラスで日時を計算する
  Calendarクラスで日時を計算する

LocalDateTimeクラスで日時を計算する

LocalDateTimeクラスで日時を計算するサンプルです。

import java.time.format.DateTimeFormatter
import java.time.LocalDateTime

fun main(args: Array<String>) {

    // 指定日時をセット 2021/12/05 22:30:10
    val ldt1 = LocalDateTime.of(2021, 12, 5, 22, 30, 10)

    //2年後を求める
    val date1 = ldt1.plusYears(2)
    println(date1) //2023-12-05T22:30:10

    //2ヶ月後を求める
    val date2 = ldt1.plusMonths(2)
    println(date2) //2022-02-05T22:30:10

    //2日前を求める
    val date3 = ldt1.minusDays(2)
    println(date3) //2021-12-03T22:30:10

    //2時間20分20秒後を求める
    val date4 = ldt1.plusHours(2).plusMinutes(20).plusSeconds(20)
    println(date4) //2021-12-06T00:50:30

    // String型+表示形式を指定する
    val dtFormat = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
    val fDate4 = date4.format(dtFormat)
    println(fDate4) // 2021/12/06 00:50:30
}

7行目は、LocalDateTimeクラスのofメソッドで年月日と時分秒を指定しています。
指定日時の引数の月は、-1する必要がありません。(Calendarクラスでは月を-1する必要があります)
10,14,22行目のメソッドは、足し算を意味するplus***という名称になっています。
18行目のメソッドは、引き算を意味するminus***という名称になっています。

26行目は、DateTimeFormatterクラスで表示形式をyyyy/mm/dd形式に変換しています。
27行目は、指定した表示形式に変換しています。

計算のメソッド

以下は、LocalDateTimeクラスの主な計算のメソッドです。

意味 メソッド
plusYears/minusYears
plusMonths/minusMonths
plusDays/minusDays
plusHours/minusHours
plusMinutes/minusMinutes
plusSeconds/minusSeconds

LocalDateTimeクラス

イミュータブル

  • インスタンスを作成した後、そのインスタンスの状態が変わらないことです。
  • 日付を加算をしても元のインスタンスは変わらず新しいインスタンスを返します。
  • Calendarクラスのインスタンスは状態が変わります。→ミュータブルです。

スレッドセーフ

  • 複数のスレッドが同時に実行しても大丈夫です。

Calendarクラスで日時を計算する

Calendarクラスで日時を計算するサンプルです。
2021年12月05日 22:30:10の2日後を求めます。

import java.text.SimpleDateFormat
import java.util.Calendar

fun main(args: Array<String>) {
    // インスタンスを生成
    val cal1 = Calendar.getInstance()

    // 指定日時をセット 2021/12/5 22:30:10
    cal1[2021, 11, 5, 22, 30] = 10

    // 指定した日時の2日後を求める
    cal1.add(Calendar.DATE, 2)

    // Date型に変換
    val date1 = cal1.time
    println(date1) //Tue Dec 07 22:30:10 JST 2021

    // 表示形式を指定
    val sdformat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
    val fdate1 = sdformat.format(date1)
    println(fdate1) // 2021/12/07 22:30:10
}

6行目は、カレンダークラスのインスタンスを生成しています。
9行目は、計算元の日時を指定しています。注意点として、月は0から始まるという仕様になっています。そのため12月にしたい場合は11を指定します。
12行目は、指定した日時の2日後を求めています。
15行目は、Date型に変換しています。
19行目のSimpleDateFormatクラスで表示形式を指定しています。
24行目は、指定した表示形式に変換しています。

Calendarクラスで1日前を求める場合

上記12行目を以下のように変更します。

cal1.add(Calendar.DATE, -1);

2つめの引数を-1にしています。

Calendarクラスで3時間後を求める場合

上記12行目を以下のように変更します。

cal1.add(Calendar.HOUR_OF_DAY, 3);

1つめの引数をHOUR_OF_DAYにしています。
hourは時間という意味です。

フィールド

以下は、主なフィールドです。

意味 フィールド
Calendar.YEAR
Calendar.MONTH
Calendar.DATE
Calendar.HOUR_OF_DAY
Calendar.MINUTE
Calendar.SECOND

Java8で導入されたクラスです。import先はjava.time~になっています。
以下は、Java8 API仕様のCalendarクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Calendar.html

関連の記事

Kotlin 現在日時の取得と表示形式のサンプル

△上に戻る