diff --git a/modules/core/src-jvm/smithy4s/time/LocalTimeCompanionPlatform.scala b/modules/core/src-jvm/smithy4s/time/LocalTimeCompanionPlatform.scala index f412f734a..204fecf3c 100644 --- a/modules/core/src-jvm/smithy4s/time/LocalTimeCompanionPlatform.scala +++ b/modules/core/src-jvm/smithy4s/time/LocalTimeCompanionPlatform.scala @@ -22,7 +22,7 @@ private[time] trait LocalTimeCompanionPlatform { /** JVM platform only method */ def fromJava(x: JLocalTime): LocalTime = - LocalTime(x.getSecond(), x.getNano()) + LocalTime.apply(x.getHour, x.getMinute, x.getSecond, x.getNano) def now(): LocalTime = fromJava(JLocalTime.now()) } diff --git a/modules/core/src-jvm/smithy4s/time/LocalTimePlatform.scala b/modules/core/src-jvm/smithy4s/time/LocalTimePlatform.scala index 329c1c18c..220a1dca9 100644 --- a/modules/core/src-jvm/smithy4s/time/LocalTimePlatform.scala +++ b/modules/core/src-jvm/smithy4s/time/LocalTimePlatform.scala @@ -21,7 +21,12 @@ import java.time.{LocalTime => JLocalTime} private[time] trait LocalTimePlatform { self: LocalTime => /** JVM platform only method */ - def toJava: JLocalTime = - JLocalTime.ofSecondOfDay(seconds.toLong).plusNanos(nano.toLong) + def toJava: JLocalTime = { + val minutesOfDay = seconds / 60 + val hour = minutesOfDay / 60 + val minute = minutesOfDay - hour * 60 + val second = seconds - minutesOfDay * 60 + JLocalTime.of(hour, minute, second, nano) + } } diff --git a/modules/core/src-jvm/smithy4s/time/OffsetDateTimeCompanionPlatform.scala b/modules/core/src-jvm/smithy4s/time/OffsetDateTimeCompanionPlatform.scala index f30ba8658..4122dfc22 100644 --- a/modules/core/src-jvm/smithy4s/time/OffsetDateTimeCompanionPlatform.scala +++ b/modules/core/src-jvm/smithy4s/time/OffsetDateTimeCompanionPlatform.scala @@ -36,10 +36,16 @@ private[time] trait OffsetDateTimeCompanionPlatform { /** JVM platform only method */ def toJava(x: OffsetDateTime): JOffsetDateTime = { - val instant = java.time.Instant - .ofEpochSecond(x.timestamp.epochSecond, x.timestamp.nano.toLong) - val offset = java.time.ZoneOffset.ofTotalSeconds(x.offset.seconds) - java.time.OffsetDateTime.ofInstant(instant, offset) + val offsetSeconds = x.offset.seconds + val timestamp = x.timestamp + val instant = java.time.Instant.ofEpochSecond( + timestamp.epochSecond - offsetSeconds, + timestamp.nano.toLong + ) + JOffsetDateTime.ofInstant( + instant, + java.time.ZoneOffset.ofTotalSeconds(offsetSeconds) + ) } def now(): OffsetDateTime = fromJava(JOffsetDateTime.now())