当前位置: 首页 > news >正文

7.Kotlin的日期类

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

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

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

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

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

三、LocalDateTime(日期+时间)

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

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

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

五、Instant(时间戳,UTC)

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

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

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

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

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

综合示例

import java.time.*
import java.time.format.DateTimeFormatterfun 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 等)。

http://www.dtcms.com/a/340981.html

相关文章:

  • Flink实现Exactly-Once语义的完整技术分解
  • 自动驾驶导航信号使用方式调研
  • ABAP OOP革命:ALV报表面向对象改造深度实战
  • PiscCode使用MediaPipe Face Landmarker实现实时人脸特征点检测
  • Tomcat 性能优化终极指南
  • 从零开始学AI——13
  • 吴恩达 Machine Learning(Class 3)
  • MySQL 8.x的性能优化文档整理
  • JavaScript 性能优化实战(易懂版)
  • InfluxDB 查询性能优化实战(一)
  • 【PSINS工具箱】平面上的组合导航,观测量为位置、速度、航向角。附完整的MATLAB代码
  • sqli-labs通关笔记-第58关 GET字符型报错注入(单引号闭合 限制5次探测机会)
  • 六大缓存(Caching)策略揭秘:延迟与复杂性的完美平衡
  • git-git submodule和git subtree的使用方式
  • 大规模IP轮换对网站的影响(服务器压力、风控)
  • CISP-PTE之路--05文
  • 企业微信2025年发布会新功能解读:企业微信AI——2025年企业协作的「最优解」是如何炼成的?
  • 跨境电商独立站搭建多少钱?响应式设计 + 全球 CDN 加速服务
  • IBMS系统集成平台具备哪些管理优势?核心价值体现在哪里?
  • HTTP/1.1 与 HTTP/2 全面对比:性能革命的深度解析
  • 工控PID控制器学习总结
  • [element-plus] el-tree 拖拽到其他地方,不拖拽到树上
  • 怎么确定mongodb是不是链接上了?
  • 疏老师-python训练营-day51复习日+退款开始
  • AP数学课程AB和BC怎么选?AP数学课程培训机构推荐哪家?
  • Git 新手完全指南(一):从零开始掌握版本控制
  • .gitignore 文件 记录
  • git报错解决:ssh: connect to host github.com port 22: Connection refused
  • 阶跃星辰 StepFun 入驻 GitCode 平台,带来工业级 AI 体验
  • macos 多个版本的jdk