Работа с датами в Kotlin: библиотеки и инструменты для разработки

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с датами в Kotlin: обзор библиотек и инструментов

Работа с датами и временем — одна из ключевых задач в современной разработке. Kotlin, будучи современным языком, предоставляет несколько мощных способов управления датами. В этой статье мы рассмотрим основные библиотеки и подходы, которые помогут вам эффективно работать с датами в проектах на Kotlin, включая Android-разработку и серверные приложения.

1. Стандартная библиотека java.time (Java 8+)

Начиная с Java 8, разработчики получили доступ к полностью переработанному API для работы с датами — java.time. Поскольку Kotlin полностью совместим с Java, вы можете использовать этот мощный инструмент напрямую. Это самый распространённый способ для серверных приложений на Kotlin.

Основные классы:

  • LocalDate — дата без времени (год, месяц, день)
  • LocalTime — время без даты
  • LocalDateTime — дата и время без часового пояса
  • ZonedDateTime — дата и время с часовым поясом
  • Instant — момент времени в UTC
  • Duration и Period — для работы с интервалами
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

fun main() {
    // Текущая дата
    val today = LocalDate.now()
    println("Сегодня: $today")

    // Создание конкретной даты
    val birthDate = LocalDate.of(1990, 5, 15)
    println("Дата рождения: $birthDate")

    // Форматирование
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy")
    val formatted = today.format(formatter)
    println("Форматированная дата: $formatted")

    // Парсинг строки
    val parsedDate = LocalDate.parse("2024-01-01")
    println("Распарсенная дата: $parsedDate")

    // Работа с датой и временем
    val now = LocalDateTime.now()
    println("Сейчас: $now")
}

2. kotlinx-datetime — официальная библиотека от JetBrains

Для проектов, использующих Kotlin Multiplatform, стандартная библиотека kotlinx-datetime является лучшим выбором. Она предоставляет единый API для всех платформ (JVM, JS, Native, Android).

Подключение (build.gradle.kts):

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1")
}

Основные возможности:

  • Instant — момент времени
  • LocalDateTime — локальная дата и время
  • LocalDate — локальная дата
  • LocalTime — локальное время
  • TimeZone — часовые пояса
  • DateTimePeriod — период времени
import kotlinx.datetime.*

fun main() {
    // Текущая дата и время
    val now = Clock.System.now()
    println("Текущий момент: $now")

    // Преобразование в локальные компоненты
    val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault())
    println("Локальное время: $localDateTime")

    // Создание даты
    val date = LocalDate(2024, 12, 25)
    println("Дата: $date")

    // Форматирование
    val formatted = localDateTime.toString()
    println("Строковое представление: $formatted")

    // Парсинг
    val parsed = Instant.parse("2024-01-01T12:00:00Z")
    println("Распарсенный Instant: $parsed")

    // Работа с часовыми поясами
    val moscowTime = now.toLocalDateTime(TimeZone.of("Europe/Moscow"))
    println("Московское время: $moscowTime")
}

3. ThreeTenABP — для обратной совместимости Android

Если ваше приложение поддерживает Android API ниже 26 (Android 8.0), вы не можете использовать java.time напрямую. В этом случае на помощь приходит библиотека ThreeTenABP (Android Backport).

Подключение:

dependencies {
    implementation("com.jakewharton.threetenabp:threetenabp:1.4.0")
}

Инициализация в Application:

import android.app.Application
import com.jakewharton.threetenabp.AndroidThreeTen

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        AndroidThreeTen.init(this)
    }
}

Пример использования (синтаксис полностью совпадает с java.time):

Рекомендаций