Kotlin 日期处理:库与工具(Kotlinx-datetime、Joda-Time、java.time)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在Kotlin中处理日期:库与工具概览



日期和时间的处理是任何应用程序中的关键任务之一:从事件记录到截止日期计算和日历显示。在Kotlin中,作为一种运行在JVM之上(并支持多平台项目)的语言,开发者可以使用多个强大的库。在本文中,我们将介绍三种主要方法:kotlinx-datetime(推荐用于多平台)、java.time(用于JVM/Android)和Joda-Time(传奇库,适用于旧项目)。



1. kotlinx-datetime — 官方多平台库



kotlinx-datetime 是JetBrains创建的现代库,专为Kotlin Multiplatform设计。它为所有平台(JVM、JS、Native)提供了统一的API,用于处理日期、时间、时区和持续时间。



安装 (Gradle)

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


主要类与示例

  • Instant — 时间点 (UTC)。
  • LocalDateTime — 不带时区的日期+时间。
  • LocalDate — 仅日期。
  • LocalTime — 仅时间。
  • TimeZone — 时区。


import kotlinx.datetime.*

fun main() { // 当前UTC时间点 val now: Instant = Clock.System.now() println("Now UTC: $now")

// 转换为本地时间(系统时区) val localDateTime: LocalDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("Local: $localDateTime")

// 处理日期 val today: LocalDate = localDateTime.date val tomorrow: LocalDate = today.plus(1, DateTimeUnit.DAY) println("Tomorrow: $tomorrow")

// 日期之间的差值 val daysBetween = tomorrow.daysUntil(today) println("Days between: $daysBetween") // -1

// 解析字符串 val parsedDate = LocalDate.parse("2025-03-15") println("Parsed: $parsedDate")}


2. java.time (ThreeTen-Backport) — JVM和Android的标准



从Java 8开始,标准库中包含了java.time包 (JSR-310)。对于Android API < 26,使用ThreeTen-Backport(或用于Android的ThreeTenABP)。Kotlin与此API完全兼容。



安装 (适用于minSdk < 26的Android)

dependencies {    implementation("org.threeten:threetenbp:1.6.9")}


示例

import java.time.*

fun main() { // 当前日期和时间 val now = LocalDateTime.now() println("Now: $now")

// 创建特定日期 val date = LocalDate.of(2025, Month.DECEMBER, 25) println("Christmas: $date")

// 格式化 val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") val formatted = now.format(formatter) println("Formatted: $formatted")

// 日期之间的差值 val start = LocalDate.of(2025, 1, 1) val end = LocalDate.of(2025, 12, 31) val days = ChronoUnit.DAYS.between(start, end) println("Days in 2025: $days") // 364}


3. Joda-Time — 久经考验的库



Joda-Time 在java.time出现之前是事实上的标准。如今它主要用于遗留项目。该库提供了丰富的功能,但被认为已过时——建议迁移到java.time或kotlinx-datetime。



安装

dependencies {    implementation("joda-time:joda-time:2.12.7")}


示例

import org.joda.time.*import org.joda.time.format.DateTimeFormat

fun main() { val now = DateTime.now() println("Now: $now")

// 添加

推荐