Kotlin 日期和时间处理:从入门到精通——完整指南

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

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

开始课程

Kotlin 日期和时间处理入门



日期和时间处理是现代开发中最常见的任务之一。无论是事件日志记录、期限计算、任务调度还是用户界面显示,都离不开对时间戳的妥善处理。在与 Java 完全兼容的 Kotlin 中,事实上的标准是 Java 8 引入的 java.time 包。该包取代了过时的 java.util.Date 和 java.util.Calendar,提供了线程安全、不可变且直观的 API。



本文将详细讲解 Kotlin 中日期和时间处理的所有关键方面:从对象创建到格式化、解析以及执行算术运算。您将通过实际示例学习如何使用 LocalDate、LocalTime、LocalDateTime、Instant、Duration 和 Period。



1. 日期和时间处理的核心类



java.time 包包含几个关键类,每个类都解决特定问题。下面我们来详细了解它们。



1.1 LocalDate —— 处理不含时间的日期



LocalDate 类表示日期(年、月、日),不包含时间和时区。它非常适合表示生日、日历事件以及不绑定到特定时刻的日期。



import java.time.LocalDate

fun main() { // 当前日期 val today = LocalDate.now() println("今天: $today") // 2025-04-05

// 指定日期 val newYear = LocalDate.of(2025, 1, 1) println("新年: $newYear")

// 从字符串解析 val parsedDate = LocalDate.parse("2025-12-31") println("解析日期: $parsedDate")}


1.2 LocalTime —— 处理不含日期的时间



LocalTime 仅存储时间(小时、分钟、秒、纳秒)。它适用于存储工作日开始时间、日程安排或计时器。



import java.time.LocalTime

fun main() { // 当前时间 val now = LocalTime.now() println("现在: $now")

// 指定时间 val meetingTime = LocalTime.of(14, 30, 0) println("会议时间: $meetingTime")

// 解析 val parsedTime = LocalTime.parse("09:15:30") println("解析时间: $parsedTime")}


1.3 LocalDateTime —— 日期和时间的组合



LocalDateTime 结合了 LocalDate 和 LocalTime。这是存储不带时区的时间点最常用的类。



import java.time.LocalDateTime

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

// 从组件创建 val specific = LocalDateTime.of(2025, 4, 5, 10, 30, 0) println("指定时刻: $specific")

// 组合日期和时间 val date = LocalDate.of(2025, 12, 25) val time = LocalTime.of(18, 0) val christmas = LocalDateTime.of(date, time) println("圣诞节: $christmas")}


1.4 Instant —— UTC 时间点



Instant 以 Unix 时间戳格式(自 1970 年 1 月 1 日以来的秒数和纳秒数)表示时间轴上的一个点。它对于存储日志、与数据库交互以及系统间数据交换不可或缺。



import java.time.Instant

fun main() { // 当前 UTC 时间 val now = Instant.now() println("现在 (UTC): $now")

// 从 Unix 时间戳创建 val fromEpoch = Instant.ofEpochSecond(1_700_000_000) println("从时间戳创建: $fromEpoch")

// 转换为毫秒 val millis = now.toEpochMilli() println("毫秒数: $millis")}


2. 日期和时间的格式化与解析



为了将日期转换为字符串

博客

书籍推荐