Работа с датами в Kotlin: обзор библиотек и инструментов
Работа с датами и временем — одна из ключевых задач в большинстве приложений. В Kotlin, как в современном мультиплатформенном языке, существует несколько способов работы с датами. В этой статье мы рассмотрим основные библиотеки и инструменты, которые помогут вам эффективно управлять датами, временем, интервалами и часовыми поясами в проектах на Kotlin.
1. Стандартная библиотека Java: java.time
Поскольку Kotlin полностью совместим с Java, вы можете использовать мощную библиотеку java.time (JSR-310), которая появилась в Java 8. Это рекомендуемый способ для серверных и Android-приложений (начиная с API 26+).
Основные классы:
LocalDate— дата без времени (год, месяц, день).LocalTime— время без даты.LocalDateTime— дата и время без часового пояса.ZonedDateTime— дата и время с часовым поясом.Instant— момент времени в UTC (машинное время).DurationиPeriod— интервалы времени.
Пример использования:
import java.time.*
fun main() {
// Текущая дата и время
val now = LocalDateTime.now()
println("Сейчас: $now")
// Создание конкретной даты
val birthDate = LocalDate.of(1990, Month.JUNE, 15)
println("Дата рождения: $birthDate")
// Работа с часовыми поясами
val zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow"))
println("Время в Москве: $zonedDateTime")
// Разница между датами
val from = LocalDate.of(2023, 1, 1)
val to = LocalDate.now()
val daysBetween = ChronoUnit.DAYS.between(from, to)
println("Дней с Нового года: $daysBetween")
// Форматирование
val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")
println("Форматированная дата: ${now.format(formatter)}")
}
Преимущества: встроенная, надежная, полная поддержка всех функций.
Недостатки: не поддерживается на старых Android (до API 26) без десингара.
2. kotlinx-datetime (мультиплатформенная библиотека от JetBrains)
Для мультиплатформенных проектов (KMP) JetBrains создала библиотеку kotlinx-datetime. Она предоставляет единый API для всех платформ (JVM, Native, JS).
Основные классы:
Instant— момент времени в UTC.LocalDateTime— дата+время без часового пояса.LocalDateиLocalTime.DateTimePeriodиDatePeriod— интервалы.TimeZone— часовой пояс.
Пример использования:
import kotlinx.datetime.*
fun main() {
// Текущий момент
val now = Clock.System.now()
println("Текущий UTC: $now")
// Преобразование в локальное время
val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault())
println("Локальное время: $localDateTime")
// Создание даты
val date = LocalDate(2024, 12, 25)
println("Дата: $date")
// Разница между датами
val start = LocalDateTime(2024, 1, 1, 0, 0)
val end = LocalDateTime(2024, 12, 31, 23, 59)
val period = start.periodUntil(end, DateTimeUnit.DAY)
println("Дней между: $period")
// Форматирование (требуется отдельная библиотека или ручное)
println("Год: ${localDateTime.year}, месяц: ${localDateTime.monthNumber}")
}
Преимущества: мультиплатформенность, легковесность, официальная поддержка.
Недостатки: ограниченные возможности форматирования (нет встроенного DateTimeFormatter).
3. ThreeTenABP (для Android ниже API 26)
Если вы разрабатываете под Android с minSdk ниже 26, используйте библиотеку ThreeTenABP — адаптацию java.time для старых версий Android.
Подключение (build.gradle):
implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0'Также в библиотеке
gRPC для Go (Golang): библиотеки, примеры и практическое руководство
Генератор QR-кодов на TypeScript: qrcode.js и qrcode-generator
Интернационализация (i18n) в Go (Golang): библиотека go-i18n
Prometheus метрики в Swift: мониторинг iOS/macOS приложений
Кэширование в TypeScript: библиотека node-cache
Рекомендаций