【Kotlin】日時型LocalDateTimeを使用する


はじめに

Javaでは日時を扱うためのLocalDateTime型が用意されており、もちろんKotlinからもそれを使うことができます。
※コメントで指摘がありましたので再度修正しました。

日時はこの型を利用して処理を行うわけですが、使い勝手が良くありません。

おまけにコンパイル時にワーニングを出します。
さらに検索しても使い方が出てきません。

ちょっと日時を扱いたかったのに挫折する人も多いでしょう。

なので日時を簡単に扱うためのクラスそのものと、そのクラスを使った日時の処理を記載します。
初歩的な処理しか書いてないので必要があれば各自で追加してください。

日付操作クラスの作成

日付を操作するためのクラスを作ってしまいましょう。
ソースは

DateTimeCtrl.kt
class DateTimeCtrl {
    @SuppressLint("NewApi")
    fun GetNow() : LocalDateTime{
        return LocalDateTime.now()
    }
    fun GetNowStr(pattern: String) : String{
        val dt = GetNow()
        return Format(dt,pattern)
    }

    @SuppressLint("NewApi")
    fun Format(date : LocalDateTime, pattern: String) : String{
        val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern(pattern)
        return date.format(formatter)
    }

    @SuppressLint("NewApi")
    fun Parse(str : String, pattern: String) : LocalDateTime{
        val formatter: DateTimeFormatter = DateTimeFormatter.ofPattern(pattern)
        val dt: LocalDateTime = LocalDateTime.parse(str,formatter)
        return dt
    }
}

ToDoで警告を回避していたのを修正

日時操作クラスの使い方

さっそく使って見ます。

MainActivity.kt
class MainActivity : AppCompatActivity() {
    private val DateTime = DateTimeCtrl()

使いたいクラス内で定義します。

MainActivity.kt
    DateTime.GetNowStr("yyyy/MM/dd HH:mm:ss.SSS")

現在の日時を文字列型で取得します。引数として文字列フォーマットを渡します。

文字 説明
yyyy 年を西暦を4桁で表示
MM 月を表示
dd 日を表示
HH 時を24時間形式で表示
mm 分を表示
ss 秒を表示
SSS ミリ秒を表示

あとは一気に説明します

MainActivity.kt
    // 現在日時を日時型で取得
    val d = DateTime.GetNow() 
    // 現在日時を指定したフォーマットの文字列で取得
    val s1 = DateTime.GetNowStr("yyyy/MM/dd HH:mm:ss.SSS")
    // 日時型を指定したフォーマットの文字列に変換
    val s2 = DateTime.Format(d,"yyyy/MM/dd HH:mm:ss.SSS")
    // 指定したフォーマットの日時文字列を日時型に変換
    val d2 = DateTime.Format(s2,"yyyy/MM/dd HH:mm:ss.SSS")

最後に

たったこれだけなのですが、工夫次第で色々な用途に使うことが出来るかと思います。
年月日それぞれの要素の単体取得や設定、時分秒の加減算などあれば便利そうですね。