Spec-Zone.ru › Kotlin 2

Instant

kotlin-stdlib/kotlin.time/Instant

Платформы и требования к версии: Common (2.3)

class Instant : Comparable<Instant> , Serializable

Момент времени.

Момент времени должен однозначно идентифицироваться независимо от часового пояса. Например, 1970-01-01, 00:00:00 не обозначает момент времени, поскольку это событие происходит в разное время в разных часовых поясах: человек в Токио подумает, что это уже 1970-01-01, на несколько часов раньше, чем человек в Берлине. Для представления таких сущностей используйте LocalDateTime из kotlinx-datetime. В отличие от этого, «момент, когда часы в Лондоне впервые показали 00:00 1 января 2000 года» — это конкретный момент времени, как и «1970-01-01, 00:00:00 UTC+0», поэтому его можно представить как Instant.

Instant использует шкалу времени UTC-SLS (сглаженная дополнительная секунда). Эта шкала времени не содержит моментов, соответствующих дополнительным секундам, а вместо этого «сглаживает» положительные и отрицательные дополнительные секунды на протяжении последних 1000 секунд дня, в который происходит добавление секунды.

Получение текущего момента

Основной способ получить текущий момент — использовать интерфейс Clock:

val clock: Clock = Clock.System
val instant = clock.now()

Реализация Clock.System использует системные часы платформы для получения текущего момента. Обратите внимание, что эти часы не гарантированно монотонны, и пользователь или система могут изменить их в любой момент, поэтому их не следует использовать для измерения временных интервалов. Для этого рассмотрите возможность использовать TimeSource.Monotonic и TimeMark вместо Clock.System и Instant.

Арифметические операции

Операторы plus и minus можно использовать для добавления Duration к Instant и вычитания её из него:

Clock.System.now() + 5.seconds // 5 seconds from now

Кроме того, оператор minus возвращает Duration, представляющую разницу между двумя моментами времени:

val kotlinRelease = Instant.parse("2016-02-15T12:00:00+03:00")
val kotlinStableDuration = Clock.System.now() - kotlinRelease

Особенности платформ

В JVM доступны функции расширения Instant.toJavaInstant() и java.time.Instant.toKotlinInstant() для преобразования между объектами kotlin.time и java.time, используемыми для той же цели. Аналогично, в JS доступны функции расширения Instant.toJSDate() и Date.toKotlinInstant().

По техническим причинам преобразование Instant в NSDate Foundation и обратно предоставляется в kotlinx-datetime с помощью функций расширения Instant.toNSDate() и NSDate.toKotlinInstant(). Возможно, в будущем эти функции станут доступны в kotlin.time.

Создание, сериализация и десериализация

С помощью fromEpochSeconds можно создать момент времени, указав количество секунд, прошедших с 1970-01-01T00:00:00Z (эпохи Unix). Свойства epochSeconds и nanosecondsOfSecond позволяют получить количество секунд и наносекунд, прошедших с эпохи.

val instant = Instant.fromEpochSeconds(1709898983, 123456789)
instant.epochSeconds // 1709898983
instant.nanosecondsOfSecond // 123456789

Функция fromEpochMilliseconds позволяет создать момент времени, указав количество миллисекунд, прошедших с эпохи. С помощью toEpochMilliseconds можно получить количество миллисекунд, прошедших с эпохи. Обратите внимание, что Instant поддерживает наносекундную точность, поэтому преобразование в миллисекунды приводит к потере точности.

val instant1 = Instant.fromEpochSeconds(1709898983, 123456789)
instant1.nanosecondsOfSecond // 123456789
val milliseconds = instant1.toEpochMilliseconds() // 1709898983123
val instant2 = Instant.fromEpochMilliseconds(milliseconds)
instant2.nanosecondsOfSecond // 123000000

Методы parse и toString позволяют получить Instant из строки и преобразовать его в строку в расширенном формате ISO 8601, который включает обозначение часового пояса.

val instant = Instant.parse("2023-01-02T22:35:01+01:00")
instant.toString() // 2023-01-02T21:35:01Z

Типы

Companion

Платформы и требования к версии: Common (2.3)

object Companion

Свойства

epochSeconds

Платформы и требования к версии: Common (2.3)

val epochSeconds: Long

Количество секунд, прошедших с момента эпохи 1970-01-01T00:00:00Z, округлённое вниз до целого числа типа Long.

isDistantFuture

Платформы и требования к версии: Common (2.3)

val Instant.isDistantFuture: Boolean

Возвращает true, если момент времени равен Instant.DISTANT_FUTURE или наступает позже.

isDistantPast

Платформы и требования к версии: Common (2.3)

val Instant.isDistantPast: Boolean

Возвращает true, если момент времени равен Instant.DISTANT_PAST или наступает раньше.

nanosecondsOfSecond

Платформы и требования к версии: Common (2.3)

val nanosecondsOfSecond: Int

Количество наносекунд, на которое этот момент времени позже epochSeconds от момента эпохи.

Функции

compareTo

Платформы и требования к версии: Common (2.3)

open operator override fun compareTo(other: Instant): Int

Сравнивает момент времени this с моментом времени other.

compareTo

Платформы и требования к версии: Common (1.6)

infix inline fun <T> Comparable<T>.compareTo(other: T): Int

Сравнивает этот объект с указанным объектом для определения порядка. Возвращает ноль, если этот объект равен указанному объекту other, отрицательное число, если он меньше other, или положительное число, если он больше other.

equals

Платформы и требования к версии: Common (2.3)

open operator override fun equals(other: Any?): Boolean

Указывает, равен ли этот объект какому-либо другому объекту.

hashCode

Платформы и требования к версии: Common (2.3)

open override fun hashCode(): Int

Возвращает хеш-код объекта.

minus

Платформы и требования к версии: Common (2.3)

operator fun minus(duration: Duration): Instant

Возвращает момент времени, полученный вычитанием указанной duration из этого момента.

operator fun minus(other: Instant): Duration

Возвращает Duration между двумя моментами времени: other и this.

plus

Платформы и требования к версии: Common (2.3)

operator fun plus(duration: Duration): Instant

Возвращает момент времени, полученный добавлением указанной duration к этому моменту.

toEpochMilliseconds

Платформы и требования к версии: Common (2.3)

fun toEpochMilliseconds(): Long

Возвращает количество миллисекунд, прошедших с момента эпохи 1970-01-01T00:00:00Z.

toJavaInstant

Платформы и требования к версии: JVM (2.3)

fun Instant.toJavaInstant(): Instant

Преобразует это значение kotlin.time.Instant в значение java.time.Instant.

toJSDate

Платформы и требования к версии: JS (2.3)

fun Instant.toJSDate(): Date

Преобразует Instant в экземпляр Date из JS.

toString

Платформы и требования к версии: Common (2.3)

open override fun toString(): String

Преобразует этот момент времени в строковое представление ISO 8601, например, 2023-01-02T23:40:57.120Z.

© 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/-instant/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API