在 Kotlin 中处理日期和时间的入门指南
处理日期和时间是任何应用程序开发中的关键任务之一。无论是事件日志记录、计算截止日期、显示日历,还是处理时间戳,都离不开一个可靠的工具箱。在 Kotlin 生态系统中,强大的 java.time 库被用于这些目的,它取代了过时的 java.util.Date 和 java.util.Calendar。由于与 Java 完全兼容,Kotlin 允许直接使用 java.time 的所有功能,并且还添加了方便的扩展方法和语法糖。
在本文中,我们将详细介绍如何在 Kotlin 中创建、格式化、解析和转换日期与时间。你将了解关键类,例如 LocalDate、LocalTime、LocalDateTime、ZonedDateTime 和 Instant,并学习如何处理周期和持续时间。所有代码示例均使用纯 Kotlin 编写,立即可用。
处理日期和时间的主要类
java.time 库提供了几个关键类,每个类都解决其自身的任务。让我们更详细地了解它们。
LocalDate — 处理不带时间的日期
LocalDate 类表示一个日期(年、月、日),不考虑时间和时区。它非常适合生日、日历事件以及时间无关的任务。
import java.time.LocalDate
fun main() { // 当前日期 val today = LocalDate.now() println("Today: $today")
// 特定日期 val specificDate = LocalDate.of(2024, 12, 25) println("Christmas: $specificDate")
// 从字符串解析 val parsedDate = LocalDate.parse("2024-12-25") println("Parsed: $parsedDate")}LocalTime — 处理不带日期的时间
LocalTime 仅存储时间(小时、分钟、秒、纳秒)。它用于日程安排、计时器和不绑定日期的时戳。
import java.time.LocalTime
fun main() { // 当前时间 val now = LocalTime.now() println("Now: $now")
// 特定时间 val lunchTime = LocalTime.of(13, 30) println("Lunch at: $lunchTime")
// 解析 val parsedTime = LocalTime.parse("15:45:30") println("Parsed: $parsedTime")}LocalDateTime — 结合日期和时间
LocalDateTime 结合了 LocalDate 和 LocalTime。这是最常用的类,用于存储不考虑时区的时间点。
import java.time.LocalDateTimeimport java.time.LocalDateimport java.time.LocalTime
fun main() { // 当前时刻 val now = LocalDateTime.now() println("Now: $now")
// 从单独组件创建 val date = LocalDate.of(2024, 12, 25) val time = LocalTime.of(10, 0) val christmasMorning = LocalDateTime.of(date, time) println("Christmas morning: $christmasMorning")
// 组合方法 val newYear = LocalDateTime.of(2025, 1, 1, 0, 0) println("New Year: $newYear")}格式化与解析日期
为了在日期和字符串之间进行转换,使用了 DateTimeFormatter 类。它支持许多预定义的格式,并且允许创建自定义模式。
将日期格式化为字符串
import java.time.LocalDateTimeimport java.time.format.DateTimeFormatter
fun main() { val now = LocalDateTime.now()
// 标准 ISO 格式 val isoFormat = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) println("ISO: $isoFormat")
// 自定义格式 val customFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss") va