core-time: add TimeBridge (Instant <-> epoch millis)
Generic content-provider time bridge shared by the family: Long epoch millis <-> kotlin.time.Instant. Extracted from Calendula for Phase 1 (Calendula as the second core-time consumer). 3 unit tests; module suite now 5 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
package de.jeanlucmakiola.floret.time
|
||||||
|
|
||||||
|
import kotlin.time.Instant
|
||||||
|
|
||||||
|
/** Epoch milliseconds (as stored by Android content providers) → [Instant]. */
|
||||||
|
fun Long.toKotlinInstantFromEpochMillis(): Instant = Instant.fromEpochMilliseconds(this)
|
||||||
|
|
||||||
|
/** [Instant] → epoch milliseconds, for writing back to a content provider. */
|
||||||
|
fun Instant.toEpochMillis(): Long = toEpochMilliseconds()
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package de.jeanlucmakiola.floret.time
|
||||||
|
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import kotlin.time.Instant
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
|
class TimeBridgeTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `epoch millis round-trips through Instant`() {
|
||||||
|
val original = 1_717_840_800_000L // 2024-06-08T10:00:00Z
|
||||||
|
val instant = original.toKotlinInstantFromEpochMillis()
|
||||||
|
assertThat(instant.toEpochMillis()).isEqualTo(original)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `zero millis maps to Instant epoch`() {
|
||||||
|
assertThat(0L.toKotlinInstantFromEpochMillis()).isEqualTo(Instant.fromEpochMilliseconds(0L))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `negative epoch millis is supported`() {
|
||||||
|
val original = -1_000_000L
|
||||||
|
assertThat(original.toKotlinInstantFromEpochMillis().toEpochMillis()).isEqualTo(original)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user