以下是 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 |
综合示例
import java.time.*
import java.time.format.DateTimeFormatterfun main() {val tomorrow = LocalDate.now().plusDays(1)println("明天: $tomorrow")val deadline = LocalDate.parse("2023-12-31")println("是否过期: ${LocalDate.now().isAfter(deadline)}")val start = LocalTime.of(9, 0)val end = LocalTime.of(18, 30)val workDuration = Duration.between(start, end)println("工作时长(小时): ${workDuration.toHours()}")val shanghaiTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))val newYorkTime = shanghaiTime.withZoneSameInstant(ZoneId.of("America/New_York"))println("上海时间: $shanghaiTime")println("纽约时间: $newYorkTime")val formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss")val formatted = LocalDateTime.now().format(formatter)println("格式化时间: $formatted")
}
以上涵盖了 Kotlin 中处理时间的核心类及常用方法,实际开发中可根据需求选择合适的类(如仅处理日期用 LocalDate
,带时区用 ZonedDateTime
等)。