ちょっと作ったのでここに記載。
日付関連のパースは、いつもちょっと面倒なのでExtensionを作ってしまった方が楽かなと。
実運用時にはフォーマットを外から与えるのではなく、別に専用のメソッドを作って中で固定して持ってしまった方が楽かもしれない。
ちなみにパースできない場合にはDateTimeParseExceptionを吐くのでご注意を。
(それが嫌ならtry-catchで括って返り値をNull許可にすればOK)
StringExtension.kt
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
import java.time.LocalTime
fun String.toLocalDate(format: String) :LocalDate = LocalDate.parse(this, DateTimeFormatter.ofPattern(format))
fun String.toLocalTime(format: String) :LocalTime = LocalTime.parse(this, DateTimeFormatter.ofPattern(format))
fun String.toLocalDateTime(format: String) :LocalDateTime = LocalDateTime.parse(this, DateTimeFormatter.ofPattern(format))
以下が使用例
例: Demo.kt
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
fun main(args:Array) {
val date: LocalDate = "2021-01-01".toLocalDate("yyyy-MM-dd")
val time: LocalTime = "12:00:00".toLocalTime("HH:mm:ss")
val datetime: LocalDateTime = "2021-01-01 12:00:00".toLocalDateTime("yyyy-MM-dd HH:mm:ss")
println("date = $date")
println("time = $time")
println("datetime = $datetime")
}
実行結果: Demo.kt
date = 2021-01-01
time = 12:00
datetime = 2021-01-01T12:00
JavaだとUtilを作って云々のところを、直接拡張して書けるのはkotlinの良いところだと思うんだ。