@@ -26,31 +26,38 @@ public actual open class TimeZone internal constructor(internal val zoneId: Zone
2626 override fun toString (): String = zoneId.toString()
2727
2828 public actual companion object {
29- public actual fun currentSystemDefault (): TimeZone = ZoneId .systemDefault(). let (:: TimeZone )
29+ public actual fun currentSystemDefault (): TimeZone = ofZone( ZoneId .systemDefault())
3030 public actual val UTC : FixedOffsetTimeZone = UtcOffset (jtZoneOffset.UTC ).asTimeZone()
3131
3232 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))
3934 } catch (e: Throwable ) {
4035 if (e.isJodaDateTimeException()) throw IllegalTimeZoneException (e)
4136 throw e
4237 }
4338
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+
4449 public actual val availableZoneIds: Set <String > get() = ZoneId .getAvailableZoneIds().toSet()
4550 }
4651}
4752
4853@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)
5158
5259 @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
5461}
5562
5663
0 commit comments