Skip to content

Commit 02ad1bf

Browse files
committed
Drop (TimeZone).Instant.offset extension property
1 parent ca4de36 commit 02ad1bf

File tree

6 files changed

+59
-69
lines changed

6 files changed

+59
-69
lines changed

core/commonMain/src/TimeZone.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ public expect open class TimeZone {
3232
*/
3333
public fun Instant.toLocalDateTime(): LocalDateTime
3434

35-
/** */
36-
public val Instant.offset: ZoneOffset
37-
3835
/** */
3936
public fun LocalDateTime.toInstant(): Instant
4037
}
@@ -43,16 +40,16 @@ public expect class ZoneOffset : TimeZone {
4340
val totalSeconds: Int
4441
}
4542

46-
public fun TimeZone.offsetAt(instant: Instant): ZoneOffset =
47-
instant.offsetIn(this) // TODO: make the other way around
43+
public expect fun TimeZone.offsetAt(instant: Instant): ZoneOffset
4844

4945
/**
5046
* @throws DateTimeArithmeticException if this value is too large to fit in [LocalDateTime].
5147
*/
5248
public expect fun Instant.toLocalDateTime(timeZone: TimeZone): LocalDateTime
5349

5450
/** */
55-
public expect fun Instant.offsetIn(timeZone: TimeZone): ZoneOffset
51+
public fun Instant.offsetIn(timeZone: TimeZone): ZoneOffset =
52+
timeZone.offsetAt(this)
5653

5754
/** */
5855
public expect fun LocalDateTime.toInstant(timeZone: TimeZone): Instant

core/commonTest/src/TimeZoneTest.kt

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -98,64 +98,64 @@ class TimeZoneTest {
9898
fun newYorkOffset() {
9999
val test = TimeZone.of("America/New_York")
100100
val offset = TimeZone.of("-5")
101-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 1, 1).offset })
102-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 2, 1).offset })
103-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 3, 1).offset })
104-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 4, 1).offset })
105-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 5, 1).offset })
106-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 6, 1).offset })
107-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 7, 1).offset })
108-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 8, 1).offset })
109-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 9, 1).offset })
110-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 10, 1).offset })
111-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 11, 1).offset })
112-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 12, 1).offset })
113-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 1, 28).offset })
114-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 2, 28).offset })
115-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 28).offset })
116-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 4, 28).offset })
117-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 5, 28).offset })
118-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 6, 28).offset })
119-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 7, 28).offset })
120-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 8, 28).offset })
121-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 9, 28).offset })
122-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 10, 28).offset })
123-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 28).offset })
124-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 12, 28).offset })
101+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 1, 1).offsetIn(test))
102+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 2, 1).offsetIn(test))
103+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 3, 1).offsetIn(test))
104+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 4, 1).offsetIn(test))
105+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 5, 1).offsetIn(test))
106+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 6, 1).offsetIn(test))
107+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 7, 1).offsetIn(test))
108+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 8, 1).offsetIn(test))
109+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 9, 1).offsetIn(test))
110+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 10, 1).offsetIn(test))
111+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 11, 1).offsetIn(test))
112+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 12, 1).offsetIn(test))
113+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 1, 28).offsetIn(test))
114+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 2, 28).offsetIn(test))
115+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 28).offsetIn(test))
116+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 4, 28).offsetIn(test))
117+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 5, 28).offsetIn(test))
118+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 6, 28).offsetIn(test))
119+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 7, 28).offsetIn(test))
120+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 8, 28).offsetIn(test))
121+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 9, 28).offsetIn(test))
122+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 10, 28).offsetIn(test))
123+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 28).offsetIn(test))
124+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 12, 28).offsetIn(test))
125125
}
126126

127127
// from 310bp
128128
@Test
129129
fun newYorkOffsetToDST() {
130130
val test = TimeZone.of("America/New_York")
131131
val offset = TimeZone.of("-5")
132-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 3, 8).offset })
133-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 3, 9).offset })
134-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 10).offset })
135-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 11).offset })
136-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 12).offset })
137-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 13).offset })
138-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 14).offset })
132+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 3, 8).offsetIn(test))
133+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 3, 9).offsetIn(test))
134+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 10).offsetIn(test))
135+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 11).offsetIn(test))
136+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 12).offsetIn(test))
137+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 13).offsetIn(test))
138+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 14).offsetIn(test))
139139
// cutover at 02:00 local
140-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 3, 9, 1, 59, 59, 999999999).offset })
141-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 3, 9, 2, 0, 0, 0).offset })
140+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 3, 9, 1, 59, 59, 999999999).offsetIn(test))
141+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 3, 9, 2, 0, 0, 0).offsetIn(test))
142142
}
143143

144144
// from 310bp
145145
@Test
146146
fun newYorkOffsetFromDST() {
147147
val test = TimeZone.of("America/New_York")
148148
val offset = TimeZone.of("-4")
149-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 11, 1).offset })
150-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 11, 2).offset })
151-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 3).offset })
152-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 4).offset })
153-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 5).offset })
154-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 6).offset })
155-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 7).offset })
149+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 11, 1).offsetIn(test))
150+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 11, 2).offsetIn(test))
151+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 3).offsetIn(test))
152+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 4).offsetIn(test))
153+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 5).offsetIn(test))
154+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 6).offsetIn(test))
155+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 7).offsetIn(test))
156156
// cutover at 02:00 local
157-
assertEquals(TimeZone.of("-4"), with (test) { createInstant(offset, 2008, 11, 2, 1, 59, 59, 999999999).offset })
158-
assertEquals(TimeZone.of("-5"), with (test) { createInstant(offset, 2008, 11, 2, 2, 0, 0, 0).offset })
157+
assertEquals(TimeZone.of("-4"), createInstant(offset, 2008, 11, 2, 1, 59, 59, 999999999).offsetIn(test))
158+
assertEquals(TimeZone.of("-5"), createInstant(offset, 2008, 11, 2, 2, 0, 0, 0).offsetIn(test))
159159
}
160160

161161
// from 310bp

core/jsMain/src/TimeZone.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ actual open class TimeZone internal constructor(internal val zoneId: ZoneId) {
1313

1414
// experimental member-extensions
1515
public actual fun Instant.toLocalDateTime(): LocalDateTime = toLocalDateTime(this@TimeZone)
16-
public actual val Instant.offset: ZoneOffset get() = offsetIn(this@TimeZone)
1716
public actual fun LocalDateTime.toInstant(): Instant = toInstant(this@TimeZone)
1817

1918
override fun equals(other: Any?): Boolean =
@@ -52,8 +51,8 @@ public actual fun Instant.toLocalDateTime(timeZone: TimeZone): LocalDateTime = t
5251
throw e
5352
}
5453

55-
public actual fun Instant.offsetIn(timeZone: TimeZone): ZoneOffset =
56-
timeZone.zoneId.rules().offsetOfInstant(this.value).let(::ZoneOffset)
54+
public actual fun TimeZone.offsetAt(instant: Instant): ZoneOffset =
55+
zoneId.rules().offsetOfInstant(instant.value).let(::ZoneOffset)
5756

5857
public actual fun LocalDateTime.toInstant(timeZone: TimeZone): Instant =
5958
this.value.atZone(timeZone.zoneId).toInstant().let(::Instant)

core/jvmMain/src/TimeZoneJvm.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ actual open class TimeZone internal constructor(internal val zoneId: ZoneId) {
1818

1919
// experimental member-extensions
2020
public actual fun Instant.toLocalDateTime(): LocalDateTime = toLocalDateTime(this@TimeZone)
21-
public actual val Instant.offset: ZoneOffset get() = offsetIn(this@TimeZone)
2221
public actual fun LocalDateTime.toInstant(): Instant = toInstant(this@TimeZone)
2322

2423
override fun equals(other: Any?): Boolean =
@@ -50,16 +49,15 @@ public actual class ZoneOffset internal constructor(zoneOffset: jtZoneOffset): T
5049
actual val totalSeconds: Int get() = zoneOffset.totalSeconds
5150
}
5251

52+
public actual fun TimeZone.offsetAt(instant: Instant): ZoneOffset =
53+
zoneId.rules.getOffset(instant.value).let(::ZoneOffset)
5354

5455
public actual fun Instant.toLocalDateTime(timeZone: TimeZone): LocalDateTime = try {
5556
java.time.LocalDateTime.ofInstant(this.value, timeZone.zoneId).let(::LocalDateTime)
5657
} catch (e: DateTimeException) {
5758
throw DateTimeArithmeticException(e)
5859
}
5960

60-
public actual fun Instant.offsetIn(timeZone: TimeZone): ZoneOffset =
61-
timeZone.zoneId.rules.getOffset(this.value).let(::ZoneOffset)
62-
6361
public actual fun LocalDateTime.toInstant(timeZone: TimeZone): Instant =
6462
this.value.atZone(timeZone.zoneId).toInstant().let(::Instant)
6563

core/nativeMain/src/TimeZone.kt

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,13 @@ public actual open class TimeZone internal constructor(private val tzid: TZID, a
9090
throw DateTimeArithmeticException("Instant ${this@toLocalDateTime} is not representable as LocalDateTime", e)
9191
}
9292

93-
actual open val Instant.offset: ZoneOffset
94-
get() {
95-
val offset = offset_at_instant(tzid, epochSeconds)
96-
if (offset == INT_MAX) {
97-
throw RuntimeException("Unable to acquire the offset at instant $this for zone ${this@TimeZone}")
98-
}
99-
return ZoneOffset.ofSeconds(offset)
93+
internal open fun offsetAtImpl(instant: Instant): ZoneOffset {
94+
val offset = offset_at_instant(tzid, instant.epochSeconds)
95+
if (offset == INT_MAX) {
96+
throw RuntimeException("Unable to acquire the offset at instant $instant for zone $this")
10097
}
98+
return ZoneOffset.ofSeconds(offset)
99+
}
101100

102101
actual fun LocalDateTime.toInstant(): Instant = atZone().toInstant()
103102

@@ -267,8 +266,7 @@ public actual class ZoneOffset internal constructor(actual val totalSeconds: Int
267266
internal override fun LocalDateTime.atZone(preferred: ZoneOffset?): ZonedDateTime =
268267
ZonedDateTime(this@atZone, this@ZoneOffset, this@ZoneOffset)
269268

270-
override val Instant.offset: ZoneOffset
271-
get() = this@ZoneOffset
269+
override fun offsetAtImpl(instant: Instant): ZoneOffset = this
272270

273271
// org.threeten.bp.ZoneOffset#toString
274272
override fun toString(): String = id
@@ -281,16 +279,14 @@ public actual class ZoneOffset internal constructor(actual val totalSeconds: Int
281279
this === other || other is ZoneOffset && totalSeconds == other.totalSeconds
282280
}
283281

284-
282+
public actual fun TimeZone.offsetAt(instant: Instant): ZoneOffset =
283+
offsetAtImpl(instant)
285284

286285
public actual fun Instant.toLocalDateTime(timeZone: TimeZone): LocalDateTime =
287286
with(timeZone) { toLocalDateTime() }
288287

289288
public actual fun LocalDateTime.toInstant(timeZone: TimeZone): Instant =
290289
with(timeZone) { toInstant() }
291290

292-
public actual fun Instant.offsetIn(timeZone: TimeZone): ZoneOffset =
293-
with(timeZone) { offset }
294-
295291
public actual fun LocalDate.atStartOfDayIn(timeZone: TimeZone): Instant =
296292
timeZone.atStartOfDay(this)

core/nativeMain/src/ZonedDateTime.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal fun ZonedDateTime.toInstant(): Instant =
4444
* @throws IllegalArgumentException if the [Instant] exceeds the boundaries of [LocalDateTime]
4545
*/
4646
internal fun Instant.toZonedLocalDateTime(zone: TimeZone): ZonedDateTime {
47-
val currentOffset = with (zone) { offset }
47+
val currentOffset = offsetIn(zone)
4848
val localSecond: Long = epochSeconds + currentOffset.totalSeconds // overflow caught later
4949
val localEpochDay = floorDiv(localSecond, SECONDS_PER_DAY.toLong()).toInt()
5050
val secsOfDay = floorMod(localSecond, SECONDS_PER_DAY.toLong()).toInt()

0 commit comments

Comments
 (0)