@@ -14,14 +14,17 @@ import kotlinx.datetime.serializers.*
1414import kotlinx.serialization.Serializable
1515
1616@Serializable(LocalTimeSerializer ::class )
17- public actual class LocalTime actual constructor(
17+ public actual class LocalTime private constructor(
1818 public actual val hour : Int ,
1919 public actual val minute : Int ,
2020 public actual val second : Int ,
21- public actual val nanosecond : Int
22- ) : Comparable<LocalTime> {
21+ public actual val nanosecond : Int ,
22+ unit : Unit ,
23+ ) : Comparable<LocalTime> {
2324
24- init {
25+ public actual constructor (
26+ hour: Int , minute: Int , second: Int , nanosecond: Int
27+ ) : this (hour, minute, second, nanosecond, Unit ) {
2528 fun check (value : Int , lower : Int , upper : Int , str : String ) =
2629 require(value in lower.. upper) {
2730 " Invalid time: $str must be a number between $lower and $upper , got $value "
@@ -37,7 +40,7 @@ public actual class LocalTime actual constructor(
3740 if (hour !in 0 .. 23 || minute !in 0 .. 59 || second !in 0 .. 59 || nanosecond !in 0 until NANOS_PER_ONE ) {
3841 null
3942 } else {
40- LocalTime (hour, minute, second, nanosecond)
43+ LocalTime (hour, minute, second, nanosecond, Unit )
4144 }
4245
4346 public actual fun parse (input : CharSequence , format : DateTimeFormat <LocalTime >): LocalTime = format.parse(input)
@@ -56,30 +59,34 @@ public actual class LocalTime actual constructor(
5659
5760 // org.threeten.bp.LocalTime#ofSecondOfDay(long, int)
5861 internal fun ofSecondOfDay (secondOfDay : Int , nanoOfSecond : Int ): LocalTime {
59- require(secondOfDay in 0 until SECONDS_PER_DAY )
60- require(nanoOfSecond in 0 until NANOS_PER_ONE )
62+ require(secondOfDay in 0 until SECONDS_PER_DAY ) {
63+ " Invalid time: secondOfDay must be between 0 and $SECONDS_PER_DAY , got $secondOfDay "
64+ }
65+ require(nanoOfSecond in 0 until NANOS_PER_ONE ) {
66+ " Invalid time: nanosecondOfSecond must be between 0 and $NANOS_PER_ONE , got $nanoOfSecond "
67+ }
6168 val hours = (secondOfDay / SECONDS_PER_HOUR )
6269 val secondWithoutHours = secondOfDay - hours * SECONDS_PER_HOUR
6370 val minutes = (secondWithoutHours / SECONDS_PER_MINUTE )
6471 val second = secondWithoutHours - minutes * SECONDS_PER_MINUTE
65- return LocalTime (hours, minutes, second, nanoOfSecond)
66- }
67-
68- internal fun of (hour : Int , minute : Int , second : Int , nanosecond : Int ): LocalTime {
69- return LocalTime (hour, minute, second, nanosecond)
72+ // The range of valid values was checked in the require statements above
73+ return LocalTime (hours, minutes, second, nanoOfSecond, Unit )
7074 }
7175
7276 // org.threeten.bp.LocalTime#ofNanoOfDay
7377 internal fun ofNanoOfDay (nanoOfDay : Long ): LocalTime {
74- require(nanoOfDay >= 0 && nanoOfDay < SECONDS_PER_DAY .toLong() * NANOS_PER_ONE )
78+ require(nanoOfDay >= 0 && nanoOfDay < SECONDS_PER_DAY .toLong() * NANOS_PER_ONE ) {
79+ " Invalid time: nanosecondOfDay must be between 0 and 86_400_000_000_000, got $nanoOfDay "
80+ }
7581 var newNanoOfDay = nanoOfDay
7682 val hours = (newNanoOfDay / NANOS_PER_HOUR ).toInt()
7783 newNanoOfDay - = hours * NANOS_PER_HOUR
7884 val minutes = (newNanoOfDay / NANOS_PER_MINUTE ).toInt()
7985 newNanoOfDay - = minutes * NANOS_PER_MINUTE
8086 val seconds = (newNanoOfDay / NANOS_PER_ONE ).toInt()
8187 newNanoOfDay - = seconds * NANOS_PER_ONE
82- return LocalTime (hours, minutes, seconds, newNanoOfDay.toInt())
88+ // The range of valid values was checked in the require statement
89+ return LocalTime (hours, minutes, seconds, newNanoOfDay.toInt(), Unit )
8390 }
8491
8592 internal actual val MIN : LocalTime = LocalTime (0 , 0 , 0 , 0 )
0 commit comments