🕘
【Android】ThreeTenABP の LocalDateTime を UNIX タイムスタンプに変換する
ThreeTenABP のLocalDateTime
を UNIX タイムスタンプに変換する方法について書いてみたいと思います。
実装例
app/build.gradle
implementation 'com.jakewharton.threetenabp:threetenabp:1.3.0'
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初期化
AndroidThreeTen.init(this)
// 現在のLocalDateTimeを取得
val nowDateTime = LocalDateTime.now()
}
ZoneOffset#ofHours
ZoneOffset#ofHours
は、UTC からの時差を指定します。
UTCとJSTの時差は「9時間」で、UTC が「09:00」のとき JST は「18:00」となるので、9時間加算します。
nowDateTime.toEpochSecond(ZoneOffset.ofHours(9))
nowDateTime.toEpochSecond(ZoneOffset.ofHours(+9))
ちなみに Offset とは「ある基準点からの距離を表した値」という意味で、ここでは「基準点=UTC」で「距離=時差」となります。
ZoneId#of
ZoneId#of
は、タイムゾーンID を文字列で渡して、返されたZoneId
からタイムスタンプを取得します。
以下のように、複数パターンの文字列を渡すことが出来ます。
nowDateTime.atZone(ZoneId.of("UTC+09:00")).toEpochSecond()
nowDateTime.atZone(ZoneId.of("UTC+09")).toEpochSecond()
nowDateTime.atZone(ZoneId.of("UTC+9")).toEpochSecond()
nowDateTime.atZone(ZoneId.of("UT+09:00")).toEpochSecond()
Discussion