@@ -26,31 +26,38 @@ public actual open class TimeZone internal constructor(internal val zoneId: Zone
26
26
override fun toString (): String = zoneId.toString()
27
27
28
28
public actual companion object {
29
- public actual fun currentSystemDefault (): TimeZone = ZoneId .systemDefault(). let (:: TimeZone )
29
+ public actual fun currentSystemDefault (): TimeZone = ofZone( ZoneId .systemDefault())
30
30
public actual val UTC : FixedOffsetTimeZone = UtcOffset (jtZoneOffset.UTC ).asTimeZone()
31
31
32
32
public actual fun of (zoneId : String ): TimeZone = try {
33
- val zone = ZoneId .of(zoneId)
34
- if (zone is jtZoneOffset) {
35
- FixedOffsetTimeZone (UtcOffset (zone))
36
- } else {
37
- TimeZone (zone)
38
- }
33
+ ofZone(ZoneId .of(zoneId))
39
34
} catch (e: Throwable ) {
40
35
if (e.isJodaDateTimeException()) throw IllegalTimeZoneException (e)
41
36
throw e
42
37
}
43
38
39
+ private fun ofZone (zoneId : ZoneId ): TimeZone = when {
40
+ zoneId is jtZoneOffset ->
41
+ FixedOffsetTimeZone (UtcOffset (zoneId))
42
+ zoneId.rules().isFixedOffset() ->
43
+ FixedOffsetTimeZone (UtcOffset (zoneId.normalized() as jtZoneOffset), zoneId)
44
+ else ->
45
+ TimeZone (zoneId)
46
+ }
47
+
48
+
44
49
public actual val availableZoneIds: Set <String > get() = ZoneId .getAvailableZoneIds().toSet()
45
50
}
46
51
}
47
52
48
53
@Serializable(with = FixedOffsetTimeZoneSerializer ::class )
49
- public actual class FixedOffsetTimeZone actual constructor(public actual val offset : UtcOffset ): TimeZone(offset.zoneOffset) {
50
- private val zoneOffset get() = zoneId as jtZoneOffset
54
+ public actual class FixedOffsetTimeZone
55
+ internal constructor (public actual val offset: UtcOffset , zoneId: ZoneId ): TimeZone (zoneId) {
56
+
57
+ public actual constructor (offset: UtcOffset ) : this (offset, offset.zoneOffset)
51
58
52
59
@Deprecated(" Use offset.totalSeconds" , ReplaceWith (" offset.totalSeconds" ))
53
- public actual val totalSeconds: Int get() = zoneOffset .totalSeconds().toInt()
60
+ public actual val totalSeconds: Int get() = offset .totalSeconds
54
61
}
55
62
56
63
0 commit comments