System
Начиная с Kotlin: 2.3
object System : Clock
Экземпляр Clock, который использует в качестве источника сведений о времени системные часы, специфичные для платформы.
Последовательные вызовы now не обязательно будут возвращать возрастающие значения Instant, а если будут, увеличение этих значений не обязательно будет соответствовать прошедшему времени.
Например, при использовании Clock.System может произойти следующее:
now возвращает
2023-01-02T22:35:01Z.Система обращается к Интернету и обнаруживает, что часы нужно скорректировать.
now возвращает
2023-01-02T22:32:05Z.
Если вам нужны предсказуемые интервалы между последовательными измерениями, рассмотрите возможность использования TimeSource.Monotonic.
Для упрощения тестирования не используйте Clock.System напрямую в реализации, а передавайте экземпляр Clock явно. Например:
Примеры
import kotlin.time.*
import kotlin.time.Duration.Companion.seconds
fun main() {
//sampleStart
// The current instant according to the system clock.
val currentInstant = Clock.System.now()
// The number of whole milliseconds that have passed since the Unix epoch.
println(currentInstant.toEpochMilliseconds())
//sampleEnd
}
import kotlin.time.*
import kotlin.time.Duration.Companion.seconds
fun main() {
//sampleStart
fun formatCurrentTime(clock: Clock): String =
clock.now().toString()
// In the production code:
val currentTimeInProduction = formatCurrentTime(Clock.System)
// Testing this value is tricky because it changes all the time.
println(currentTimeInProduction)
// In the test code:
val testClock = object : Clock {
override fun now(): Instant = Instant.parse("2023-01-02T22:35:01Z")
}
// Then, one can write a completely deterministic test:
val currentTimeForTests = formatCurrentTime(testClock)
println(currentTimeForTests) // 2023-01-02T22:35:01Z
//sampleEnd
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.time/-clock/-system/index.html