Upgrade to Pro — share decks privately, control downloads, hide ads and more …

java.timeをAndroidで使う

Avatar for Takuji Nishibayashi Takuji Nishibayashi
April 25, 2024
160

 java.timeをAndroidで使う

Avatar for Takuji Nishibayashi

Takuji Nishibayashi

April 25, 2024
Tweet

More Decks by Takuji Nishibayashi

Transcript

  1. 自己紹介 西林 拓志(にしばやし たくじ) Twitter/GitHub takuji31 Sansan 株式会社 技術本部 Mobile

    Application グループ Eight Android エンジニア Android (2009〜) Kotlin (2014〜) 1
  2. java.util.Date / java.util.Calendar java.util.Date は 1970/01/01 00:00:00.000 からの秒数を表したクラス タイムゾーンや歴(カレンダー)の情報はない java.util.Calendar

    は現在の日時を表したクラス タイムゾーンや暦の情報が含まれる よく使われる具象クラスは GregorianCalendar 古い API でよく使われる たとえば Realm の日付型は java.util.Date 6
  3. build.gradle.kts android { defaultConfig { multiDexEnabled = true } compileOptions

    { isCoreLibraryDesugaringEnabled = true sourceCompatibility = JavaVersion.VERSION_1_8 // 11 でもOK targetCompatibility = JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") } 24
  4. 使い方 val now = Instant.now() now.epochSecond // 1970/01/01 00:00:00 からの経過秒数

    now.toEpochMilli() // 1970/01/01 00:00:00 からの経過ミリ秒数 now.nano // ナノ秒 val secondLater = now + Duration.ofSeconds(1) // 1 秒後 val sameTimeOfYesterday = now - Duration.ofDays(-1) // 昨日の同じ時間 30
  5. 使い方 val now = LocalDateTime.now() now.year // 2024 now.month //

    4 now.dayOfMonth // 25 val eventStartAt = LocalDateTime.of(2024, 4, 25, 18, 30, 0) // 2024/04/25 18:30:00 val eventEndAt = eventStartAt + Duration.ofMinutes(90) // 2024/04/25 20:00:00 val roomOpenAt = eventStartAt - Duration.ofMinutes(30) // 2024/04/25 18:00:00 34
  6. 使い方 val now = ZonedDateTime.now() now.year // 2024 now.month //

    4 now.dayOfMonth // 25 // convert other classes val nowInstant = now.toInstant() val nowLocalDateTime = now.toLocalDateTime() val currentZone = ZoneId.systemDefault() // Asia/Tokyo val JST = ZoneId.of("Asia/Tokyo") val UTC = ZoneId.of("UTC") val eventStartAtUTC = ZonedDateTime.now(UTC) // 2024/04/25 9:30:00 val eventEndAt = eventStartAtUTC + Duration.ofMinutes(90) // 2024/04/25 11:00:00 val roomOpenAt = eventStartAtUTC - Duration.ofMinutes(30) // 2024/04/25 9:00:00 37