以下是 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
等)。