SubwayTooter-Android-App/base/src/main/java/jp/juggler/util/time/TimeUtils.kt

47 lines
1.3 KiB
Kotlin

/**
* Java8 Time API を使った日時関連のユーティリティ
* - api "org.jetbrains.kotlinx:kotlinx-datetime:0.4.0"
* - desugar で Java 8 の日時APIを使えるようにする必要がある
* - https://developer.android.com/studio/write/java8-support?hl=ja
* - coreLibraryDesugaringEnabled true
* - coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.2.2"
*/
package jp.juggler.util.time
import jp.juggler.util.log.LogCategory
import java.time.Instant
import java.time.ZoneId
private val log = LogCategory("TimeUtils")
/**
* kotlinx-datetime の Instant.parse は ISO8601フォーマットを受け付ける
*/
fun String.parseTimeIso8601() =
when {
isBlank() -> null
else -> try {
Instant.parse(this).toEpochMilli()
} catch (ex: Throwable) {
log.w("parseTime failed. $this")
null
}
}
/**
* UI表示用。フォーマットは適当。
*/
fun Long.formatLocalTime(): String {
val tz = ZoneId.systemDefault()
val zdt = Instant.ofEpochMilli(this).atZone(tz)
return "%d/%02d/%02d %02d:%02d:%02d.%03d".format(
zdt.year,
zdt.monthValue,
zdt.dayOfMonth,
zdt.hour,
zdt.minute,
zdt.second,
zdt.nano / 1_000_000,
)
}