7.Kotlin的日期类

以下是 Kotlin 中常用时间类(基于 java.time 包)的核心方法及使用示例,参考数组方法的表格形式,按类分类展示:

一、LocalDate(日期:年/月/日)

方法签名 返回值 说明 示例
now(): LocalDate LocalDate 获取当前日期 LocalDate.now() → 2023-10-05
of(year: Int, month: Int, day: Int): LocalDate LocalDate 创建指定日期 LocalDate.of(2023, 10, 5) → 2023-10-05
of(year: Int, month: Month, day: Int): LocalDate LocalDate 用Month枚举创建 LocalDate.of(2023, Month.OCTOBER, 5)
getYear(): Int Int 获取年份 LocalDate.now().getYear() → 2023
getMonth(): Month Month 获取月份(枚举) LocalDate.now().getMonth() → OCTOBER
getMonthValue(): Int Int 获取月份(数字1-12) LocalDate.now().getMonthValue() → 10
getDayOfMonth(): Int Int 获取当月第几天 LocalDate.now().getDayOfMonth() → 5
getDayOfWeek(): DayOfWeek DayOfWeek 获取星期几(枚举) LocalDate.now().getDayOfWeek() → THURSDAY
plusYears(years: Long): LocalDate LocalDate 增加年份 LocalDate.of(2023,10,5).plusYears(1) → 2024-10-05
plusMonths(months: Long): LocalDate LocalDate 增加月份 LocalDate.of(2023,10,5).plusMonths(1) → 2023-11-05
plusDays(days: Long): LocalDate LocalDate 增加天数 LocalDate.of(2023,10,5).plusDays(1) → 2023-10-06
minusYears(years: Long): LocalDate LocalDate 减少年份 LocalDate.of(2023,10,5).minusYears(1) → 2022-10-05
minusMonths(months: Long): LocalDate LocalDate 减少月份 LocalDate.of(2023,10,5).minusMonths(1) → 2023-09-05
minusDays(days: Long): LocalDate LocalDate 减少天数 LocalDate.of(2023,10,5).minusDays(1) → 2023-10-04
isAfter(other: LocalDate): Boolean Boolean 是否在指定日期之后 LocalDate.of(2023,10,6).isAfter(LocalDate.of(2023,10,5)) → true
isBefore(other: LocalDate): Boolean Boolean 是否在指定日期之前 LocalDate.of(2023,10,4).isBefore(LocalDate.of(2023,10,5)) → true
isEqual(other: LocalDate): Boolean Boolean 是否与指定日期相等 LocalDate.of(2023,10,5).isEqual(LocalDate.of(2023,10,5)) → true
atTime(time: LocalTime): LocalDateTime LocalDateTime 结合时间生成LocalDateTime LocalDate.now().atTime(12,30) → 2023-10-05T12:30
parse(text: CharSequence): LocalDate LocalDate 从字符串解析日期(默认格式yyyy-MM-dd) LocalDate.parse("2023-10-05") → 2023-10-05

二、LocalTime(时间:时/分/秒)

方法签名 返回值 说明 示例
now(): LocalTime LocalTime 获取当前时间 LocalTime.now() → 15:30:45.123
of(hour: Int, minute: Int): LocalTime LocalTime 创建指定时分 LocalTime.of(12, 30) → 12:30
of(hour: Int, minute: Int, second: Int): LocalTime LocalTime 创建指定时分秒 LocalTime.of(12,30,45) → 12:30:45
getHour(): Int Int 获取小时(0-23) LocalTime.now().getHour() → 15
getMinute(): Int Int 获取分钟(0-59) LocalTime.now().getMinute() → 30
getSecond(): Int Int 获取秒(0-59) LocalTime.now().getSecond() → 45
getNano(): Int Int 获取纳秒(0-999,999,999) LocalTime.now().getNano() → 123456789
plusHours(hours: Long): LocalTime LocalTime 增加小时 LocalTime.of(12,30).plusHours(1) → 13:30
plusMinutes(minutes: Long): LocalTime LocalTime 增加分钟 LocalTime.of(12,30).plusMinutes(30) → 13:00
plusSeconds(seconds: Long): LocalTime LocalTime 增加秒 LocalTime.of(12,30).plusSeconds(60) → 12:31
minusHours(hours: Long): LocalTime LocalTime 减少小时 LocalTime.of(12,30).minusHours(1) → 11:30
minusMinutes(minutes: Long): LocalTime LocalTime 减少分钟 LocalTime.of(12,30).minusMinutes(30) → 12:00
isAfter(other: LocalTime): Boolean Boolean 是否在指定时间之后 LocalTime.of(13,0).isAfter(LocalTime.of(12,30)) → true
isBefore(other: LocalTime): Boolean Boolean 是否在指定时间之前 LocalTime.of(12,0).isBefore(LocalTime.of(12,30)) → true
atDate(date: LocalDate): LocalDateTime LocalDateTime 结合日期生成LocalDateTime LocalTime.now().atDate(LocalDate.now()) → 2023-10-05T15:30:45
parse(text: CharSequence): LocalTime LocalTime 从字符串解析时间(默认格式HH:mm:ss) LocalTime.parse("12:30:45") → 12:30:45

三、LocalDateTime(日期+时间)

方法签名 返回值 说明 示例
now(): LocalDateTime LocalDateTime 获取当前日期时间 LocalDateTime.now() → 2023-10-05T15:30:45
of(date: LocalDate, time: LocalTime): LocalDateTime LocalDateTime 结合日期和时间 LocalDateTime.of(LocalDate.now(), LocalTime.now())
of(year: Int, month: Int, day: Int, hour: Int, minute: Int): LocalDateTime LocalDateTime 直接创建 LocalDateTime.of(2023,10,5,12,30) → 2023-10-05T12:30
toLocalDate(): LocalDate LocalDate 提取日期部分 LocalDateTime.now().toLocalDate() → 2023-10-05
toLocalTime(): LocalTime LocalTime 提取时间部分 LocalDateTime.now().toLocalTime() → 15:30:45
plusYears(years: Long): LocalDateTime LocalDateTime 增加年份 LocalDateTime.now().plusYears(1)
minusMonths(months: Long): LocalDateTime LocalDateTime 减少月份 LocalDateTime.now().minusMonths(1)
isAfter(other: LocalDateTime): Boolean Boolean 是否在指定日期时间之后 LocalDateTime.now().isAfter(LocalDateTime.now().minusHours(1)) → true
atZone(zone: ZoneId): ZonedDateTime ZonedDateTime 转换为带时区的时间 LocalDateTime.now().atZone(ZoneId.of("Asia/Shanghai"))

四、ZonedDateTime(带时区的日期时间)

方法签名 返回值 说明 示例
now(zone: ZoneId): ZonedDateTime ZonedDateTime 获取指定时区的当前时间 ZonedDateTime.now(ZoneId.of("UTC"))
now(): ZonedDateTime ZonedDateTime 获取系统默认时区的当前时间 ZonedDateTime.now() → 2023-10-05T15:30:45+08:00[Asia/Shanghai]
getZone(): ZoneId ZoneId 获取时区 ZonedDateTime.now().getZone() → Asia/Shanghai
withZoneSameInstant(zone: ZoneId): ZonedDateTime ZonedDateTime 转换到另一个时区(时间点不变) ZonedDateTime.now().withZoneSameInstant(ZoneId.of("UTC"))
toLocalDateTime(): LocalDateTime LocalDateTime 转换为本地日期时间(无时区) ZonedDateTime.now().toLocalDateTime()
toInstant(): Instant Instant 转换为时间戳 ZonedDateTime.now().toInstant()

五、Instant(时间戳,UTC)

方法签名 返回值 说明 示例
now(): Instant Instant 获取当前UTC时间戳 Instant.now() → 2023-10-05T07:30:45.123Z
toEpochMilli(): Long Long 转换为毫秒级时间戳(1970年起) Instant.now().toEpochMilli() → 1696507845123
plusMillis(millis: Long): Instant Instant 增加毫秒 Instant.now().plusMillis(1000)
minusSeconds(seconds: Long): Instant Instant 减少秒 Instant.now().minusSeconds(60)
atZone(zone: ZoneId): ZonedDateTime ZonedDateTime 转换为指定时区的时间 Instant.now().atZone(ZoneId.of("Asia/Shanghai"))

六、Duration(时间间隔:时/分/秒)

方法签名 返回值 说明 示例
between(start: T, end: T): Duration Duration 计算两个时间的间隔 Duration.between(LocalTime.of(12,0), LocalTime.of(13,30)) → PT1H30M
ofHours(hours: Long): Duration Duration 创建指定小时的间隔 Duration.ofHours(2) → PT2H
plusMinutes(minutes: Long): Duration Duration 增加分钟 Duration.ofHours(1).plusMinutes(30) → PT1H30M
toMinutes(): Long Long 转换为总分钟数 Duration.ofHours(1).toMinutes() → 60
isNegative(): Boolean Boolean 是否为负间隔 Duration.ofHours(-1).isNegative() → true

七、Period(日期间隔:年/月/日)

方法签名 返回值 说明 示例
between(start: LocalDate, end: LocalDate): Period Period 计算两个日期的间隔 Period.between(LocalDate.of(2023,1,1), LocalDate.of(2023,10,5)) → P9M4D
ofYears(years: Int): Period Period 创建指定年数的间隔 Period.ofYears(1) → P1Y
plusMonths(months: Int): Period Period 增加月数 Period.ofYears(1).plusMonths(3) → P1Y3M
getDays(): Int Int 获取天数部分 Period.between(LocalDate.of(2023,10,1), LocalDate.of(2023,10,5)).getDays() → 4

综合示例

kotlin 复制代码
import java.time.*
import java.time.format.DateTimeFormatter

fun main() {
    // 1. 获取当前日期并加1天
    val tomorrow = LocalDate.now().plusDays(1)
    println("明天: $tomorrow")

    // 2. 解析字符串为日期并比较
    val deadline = LocalDate.parse("2023-12-31")
    println("是否过期: ${LocalDate.now().isAfter(deadline)}")

    // 3. 计算两个时间的间隔
    val start = LocalTime.of(9, 0)
    val end = LocalTime.of(18, 30)
    val workDuration = Duration.between(start, end)
    println("工作时长(小时): ${workDuration.toHours()}")

    // 4. 带时区的时间转换
    val shanghaiTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))
    val newYorkTime = shanghaiTime.withZoneSameInstant(ZoneId.of("America/New_York"))
    println("上海时间: $shanghaiTime")
    println("纽约时间: $newYorkTime")

    // 5. 格式化输出
    val formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss")
    val formatted = LocalDateTime.now().format(formatter)
    println("格式化时间: $formatted")
}

以上涵盖了 Kotlin 中处理时间的核心类及常用方法,实际开发中可根据需求选择合适的类(如仅处理日期用 LocalDate,带时区用 ZonedDateTime 等)。

相关推荐
☺����几秒前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
染翰19 分钟前
lua入门以及在Redis中的应用
开发语言·redis·lua
王者鳜錸30 分钟前
PYTHON让繁琐的工作自动化-函数
开发语言·python·自动化
兔老大RabbitMQ1 小时前
git pull origin master失败
java·开发语言·git
tt5555555555551 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
xiao助阵1 小时前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python
科大饭桶2 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
钢铁男儿3 小时前
Python 正则表达式实战:解析系统登录与进程信息
开发语言·python·正则表达式
野生技术架构师3 小时前
2025年中高级后端开发Java岗八股文最新开源
java·开发语言