Класс Clock

Класс Clock из пакета java.time предоставляет доступ к текущему моменту времени и позволяет работать с различными временными зонами. С помощью этого класса можно получать текущее время, создавать фиксированные часы для тестирования, а также работать со смещениями времени.

Импорт

kotlinimport java.time.Clock
import java.time.ZoneId

Синтаксис

kotlin// Получение часов системной зоны по умолчанию
fun systemDefaultZone(): Clock

// Получение часов UTC
fun systemUTC(): Clock

// Получение часов для указанной зоны
fun system(zone: ZoneId): Clock

// Создание фиксированных часов
fun fixed(fixedInstant: Instant, zone: ZoneId): Clock

// Создание часов со смещением
fun offset(baseClock: Clock, offsetDuration: Duration): Clock

// Получение текущего момента
fun instant(): Instant

// Получение временной зоны
fun getZone(): ZoneId

// Создание копии часов с другой зоной
fun withZone(zone: ZoneId): Clock

Пример

Получение текущего времени с использованием системной зоны по умолчанию:

kotlinval clock = Clock.systemDefaultZone()
val instant = clock.instant()
println("Current time: $instant")

Результат выполнения кода:

kotlinString "Current time: 2025-01-15T10:30:45.123Z"

Пример

Получение текущего времени в UTC:

kotlinval clock = Clock.systemUTC()
val instant = clock.instant()
println("UTC time: $instant")

Результат выполнения кода:

kotlinString "UTC time: 2025-01-15T10:30:45.123Z"

Пример

Создание фиксированных часов для тестирования:

kotlinval fixedInstant = Instant.parse("2025-12-31T23:59:59Z")
val clock = Clock.fixed(fixedInstant, ZoneId.systemDefault())
val instant = clock.instant()
println("Fixed time: $instant")

Результат выполнения кода:

kotlinString "Fixed time: 2025-12-31T23:59:59Z"

Пример

Создание часов со смещением на 2 часа вперед:

kotlinval baseClock = Clock.systemUTC()
val offsetClock = Clock.offset(baseClock, Duration.ofHours(2))
val instant = offsetClock.instant()
println("Offset time: $instant")

Результат выполнения кода:

kotlinString "Offset time: 2025-01-15T12:30:45.123Z"

Пример

Использование часов с конкретной временной зоной:

kotlinval tokyoZone = ZoneId.of("Asia/Tokyo")
val clock = Clock.system(tokyoZone)
val instant = clock.instant()
val zone = clock.getZone()

println("Time in $zone: $instant")

Результат выполнения кода:

kotlinString "Time in Asia/Tokyo: 2025-01-15T19:30:45.123Z"

Смотрите также

  • класс Instant,
    который представляет момент на временной шкале
  • класс ZoneId,
    который представляет идентификатор временной зоны
  • класс Duration,
    который представляет продолжительность времени
  • функцию systemUTC класса Clock,
    которая возвращает часы в UTC зоне