38 lines
1.3 KiB
Kotlin
38 lines
1.3 KiB
Kotlin
package fi.schro.util
|
|
|
|
import kotlinx.datetime.*
|
|
import kotlinx.serialization.KSerializer
|
|
import kotlinx.serialization.Serializable
|
|
import kotlinx.serialization.descriptors.PrimitiveKind
|
|
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
|
import kotlinx.serialization.descriptors.SerialDescriptor
|
|
import kotlinx.serialization.encoding.Decoder
|
|
import kotlinx.serialization.encoding.Encoder
|
|
|
|
object TimeUtil {
|
|
fun getCurrentDate(): LocalDate {
|
|
val currentTime = Clock.System.now()
|
|
return currentTime.toLocalDateTime(TimeZone.currentSystemDefault()).date
|
|
}
|
|
}
|
|
|
|
fun LocalDate.atTime(time: LocalTime): LocalDateTime{
|
|
return LocalDateTime(year, month, dayOfMonth, time.hour, time.minute, 0, 0)
|
|
}
|
|
|
|
@Serializable
|
|
data class LocalTime(val hour: Int, val minute: Int)
|
|
|
|
object LocalTimeSerializer: KSerializer<LocalTime>{
|
|
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Time", PrimitiveKind.STRING)
|
|
|
|
override fun deserialize(decoder: Decoder): LocalTime {
|
|
val stringValue = decoder.decodeString()
|
|
val values = stringValue.split(":").map { it.toInt() }
|
|
return LocalTime(values[0], values[1])
|
|
}
|
|
|
|
override fun serialize(encoder: Encoder, value: LocalTime) {
|
|
encoder.encodeString("${value.hour}:${value.minute}")
|
|
}
|
|
} |