@@ -14,14 +14,17 @@ import kotlinx.datetime.serializers.*
14
14
import kotlinx.serialization.Serializable
15
15
16
16
@Serializable(LocalTimeSerializer ::class )
17
- public actual class LocalTime actual constructor(
17
+ public actual class LocalTime private constructor(
18
18
public actual val hour : Int ,
19
19
public actual val minute : Int ,
20
20
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> {
23
24
24
- init {
25
+ public actual constructor (
26
+ hour: Int , minute: Int , second: Int , nanosecond: Int
27
+ ) : this (hour, minute, second, nanosecond, Unit ) {
25
28
fun check (value : Int , lower : Int , upper : Int , str : String ) =
26
29
require(value in lower.. upper) {
27
30
" Invalid time: $str must be a number between $lower and $upper , got $value "
@@ -37,7 +40,7 @@ public actual class LocalTime actual constructor(
37
40
if (hour !in 0 .. 23 || minute !in 0 .. 59 || second !in 0 .. 59 || nanosecond !in 0 until NANOS_PER_ONE ) {
38
41
null
39
42
} else {
40
- LocalTime (hour, minute, second, nanosecond)
43
+ LocalTime (hour, minute, second, nanosecond, Unit )
41
44
}
42
45
43
46
public actual fun parse (input : CharSequence , format : DateTimeFormat <LocalTime >): LocalTime = format.parse(input)
@@ -56,30 +59,34 @@ public actual class LocalTime actual constructor(
56
59
57
60
// org.threeten.bp.LocalTime#ofSecondOfDay(long, int)
58
61
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
+ }
61
68
val hours = (secondOfDay / SECONDS_PER_HOUR )
62
69
val secondWithoutHours = secondOfDay - hours * SECONDS_PER_HOUR
63
70
val minutes = (secondWithoutHours / SECONDS_PER_MINUTE )
64
71
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 )
70
74
}
71
75
72
76
// org.threeten.bp.LocalTime#ofNanoOfDay
73
77
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
+ }
75
81
var newNanoOfDay = nanoOfDay
76
82
val hours = (newNanoOfDay / NANOS_PER_HOUR ).toInt()
77
83
newNanoOfDay - = hours * NANOS_PER_HOUR
78
84
val minutes = (newNanoOfDay / NANOS_PER_MINUTE ).toInt()
79
85
newNanoOfDay - = minutes * NANOS_PER_MINUTE
80
86
val seconds = (newNanoOfDay / NANOS_PER_ONE ).toInt()
81
87
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 )
83
90
}
84
91
85
92
internal actual val MIN : LocalTime = LocalTime (0 , 0 , 0 , 0 )
0 commit comments