Kotlinで日付をフォーマットする方法

目次

  1. 背景
  2. Kotlinで使える日時を扱うクラス
  3. LocalDateTime型で書式を指定する
    1. 実装例
  4. Date型で書式を指定する
    1. 実装例
  5. Calendar型で書式を指定する
    1. 実装例
  6. パターン文字
  7. まとめ
  8. 関連記事
  9. おすすめ書籍

背景

こんにちは。 かりんとうマニア(@karintozuki)です。
今回はKotlinで日時を好きなフォーマットで表示する方法を紹介します。

Kotlinで使える日時を扱うクラス

Kotlinの、と言いつつも、実際はJavaのクラスです。
Javaには日時を扱うクラスがいくつかあります。
(これらはより良い実装のために試行錯誤を重ねた結果だそうですが、
新しくJavaを始める人にとってはややこしいだけですね。)

以下の表がKotlinで使える日時を扱うためのクラスです。
基本的にはLocalDateTimeが推奨されています。

クラス名 説明
Date 一番の古株。後方互換性のためだけに残されているクラスなので、新しいプロジェクトでは使わないのが吉。ただ、既存のプロジェクトでは見かける機会もあると思います。
Calendar Dateだけでは日付の操作ができないので、それらが実装されています。Dateと一緒に使うイメージ。
LocalDateTime Java8で導入されたクラス。使える時はこちらを使ったほうが良いです。Localはタイムゾーンについての情報をもたないという意味合いです。

また、Joda Timesというライブラリも人気らしいのですが、今回はKotlin標準で使えるクラスだけを扱うことにします。

というわけで、それぞれのフォーマット方法を紹介します。

LocalDateTime型で書式を指定する

LocalDateTime型で書式を指定したい時は
DateTimeFormatterを使用します。

実装例

FormatLocalDateTime.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

// 現在時刻の取得
val now = LocalDateTime.now()

// フォーマットの指定
val dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")

// 文字列の生成
val result = now.format(dtf)

println(result) // 結果: 2020/10/18 18:04:5

Date型で書式を指定する

Date型で書式を指定したい時は
SimpleDateFormat型を使用します。

実装例

FormatDate.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Date
import java.text.SimpleDateFormat

// 現在時刻の取得
val now = Date();

// フォーマットの指定
val sdf = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")

// 文字列の生成
val result = sdf.format(now)

print(result) //結果:2020/10/18 18:04:52

Calendar型で書式を指定する

Calendar型は二つ方法があります。
一つはDate型に変換して、SimpleDateFormatを使う方法。
もう一つはCalendarが持っているget()メソッドを利用して日付や時間などを個別に取り出す方法です。

実装例

FormatCalendar.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Date
import java.util.Calendar
import java.text.SimpleDateFormat

/*
* SimpleDateFormatを使う
*/
// 現在時刻の取得
val cal = Calendar.getInstance();
// フォーマットの指定
val sdf = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")

// 文字列の生成
val result = sdf.format(cal.getTime())

println(result) // 結果:2020/10/18 18:10:06

/*
* getメソッドを使う
*/

val result2 = "${cal.get(Calendar.YEAR)}/${cal.get(Calendar.MONTH)+1}/${cal.get(Calendar.DAY_OF_MONTH)}"
println(result2) // 結果:2020/10/18

Calendar.get(Calendar.MONTH)で取得できる数字は0始まりの月です。
実装例では+1をすることで実際の月と合わせています。

パターン文字

日時フォーマットを指定する際に使用できる文字を紹介します。
たくさんあるので、ここではよく使われるものだけ紹介します。
興味があれば公式ドキュメントを見てみてください。

DateTimeFormatterの方が使える文字が増えていますが、
よく使う以下のものはどちらにも使えます。

文字 時間の単位
y
M
d
H 時間(0-23)
h 午前・午後の時間(0-11)
m
s
S ミリ秒

参考:公式ドキュメント
SimpleDateFormat
DateTimeFormatter

まとめ

今回はKotlinで日時をフォーマットを指定して表示する方法を紹介しました。

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

関連記事

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

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

おすすめ書籍