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.pswp.cn/bicheng/94513.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94513.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94513.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Big Data】Hive技術解析:大數據倉庫的SQL橋梁

Hive作為Apache頂級項目,是Hadoop生態系統中最具影響力的SQL查詢引擎,它解決了大數據處理與傳統SQL技能之間的鴻溝。Hive的核心價值在于將類SQL查詢語言HiveQL無縫轉換為分布式計算框架MapReduce的任務,使數據分析師能夠利用熟悉的SQL語法操作…

Ubuntu2204server系統安裝postgresql14并配置密碼遠程連接

前言: 最近因項目需要安裝postgresql14,系統是ubuntu2204server系統,安裝好后發現無法實現遠程連接,解決了之后在此記錄一下解決方法。 疑問: 什么情況下需要配置postgresql遠程連接? ①如果是postgresql和…

【嵌入式】【搜集】狀態機、狀態遷移圖及狀態模式材料

文章目錄狀態機狀態機狀態機定義與核心特點狀態機總結狀態遷移圖狀態遷移圖狀態遷移圖核心概念與要素狀態遷移圖常見錯誤與規避狀態遷移圖總結狀態模式狀態模式狀態模式核心概念與組成狀態模式核心價值與適用場景狀態模式優缺點分析進階優化技巧行為模式總結狀態機 狀態機 狀…

Java學習歷程14——制作一款五子棋游戲(4)

上次我們基本實現了五子棋游戲的功能,這次我們進行一些優化和添加一些便于用戶使用的功能。新增功能及優化一、復盤功能復盤功能就是指在下完一局棋后,我們可以通過復盤按鈕使本局棋的所有棋子重頭開始自動下一遍。分析得知,我們首先要保存以…

記錄一次el-table+sortablejs的拖拽bug

bug回顧出現bug的情況時 當編輯表格過于緊湊的時候 有些非必要編輯或需要一眼看到的數據 移動到了el-table-column typeexpand時 同事:怎么拖拽功能用不了了 ok開始檢查代碼 當原來是個簡單的編輯表格 不涉及展開和簡單拖拽時 不會出現問題 解決了 出現了展開行以后…

利用go sort.Sort()排序自定義切片

1 sort.Sort()簡介2 核心功能3 調用前提4 代碼示例 1 sort.Sort()簡介 Go語言中的sort.Sort函數是標準庫提供的通用排序接口 2 核心功能 核心功能支持多種類型進行快速排序 基礎類型支持?:內置Ints、Float64s、Strings等函數直接排序常見切片 自定義排序?&a…

Elasticsearch腦裂緊急處理與預防

在 Elasticsearch 中出現 網絡分區(Network Partition) 或 腦裂(Split-Brain) 導致兩個子集群各自選出 Master 的情況,是非常嚴重的問題。比如這個場景(20個節點分裂成兩個10節點的子集群,各自選…

華為網路設備學習-29(BGP協議 四)路由策略-實驗

示例 延伸-具體實驗1.代碼部分:基礎配置R1 [Huawei]int GigabitEthernet 0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.13.1 24[Huawei]int LoopBack 1 [Huawei-LoopBack1]ip address 172.16.1.1 24 [Huawei-LoopBack1]q [Huawei]int LoopBack 2 [Huawei-Lo…

500系列狀態碼與可能的場景

501 Not Implemented(未實現)HTTP 方法不支持客戶端發送了 PUT、DELETE、PATCH 請求但服務器只實現了 GET 和 POST協議功能不支持客戶端使用了 HTTP/2 的某些高級特性服務器只支持 HTTP/1.1,無法處理,返回 501API 接口未完成開發中…

大數據、hadoop、爬蟲、spark項目開發設計之基于數據挖掘的交通流量分析研究

大數據、hadoop、爬蟲、spark項目開發設計之基于數據挖掘的交通流量分析研究

Pytest項目_day20(log日志)

Log日志優點:記錄程序運行信息,方便定位問題python日志模塊logging,日志等級如下: DEBUGINFO(正常)WARNINGERROR(報錯)示例代碼如下:import logging import os.path impo…

elasticsearch中的分詞器配置及使用

一、什么是分詞器? 在 Elasticsearch(ES)中,分詞器(Analyzer) 是處理文本的核心組件,負責將原始文本轉換為可搜索的索引詞(Term)。它是文本分析過程的核心,直…

《Linux 網絡編程二:UDP 與 TCP 的差異、應用及問題應對》

一、UDP 與 TCP 對比表對比項UDPTCP連接方式無需建立連接有連接(三次握手建立,四次揮手斷開)傳輸可靠性盡最大努力交付,可能丟包安全可靠的數據傳輸機制面向對象面向數據包面向數據流傳輸模式一對一、一對多傳輸本質一對一&#x…

uniapp 頁面跳轉及字符串轉義

1. uniapp 頁面跳轉及字符串轉義 1.1. uniapp頁面跳轉方法 在uniapp中,頁面跳轉可以通過多種方式進行,包括但不限于路由跳轉和頁面間事件通信。 ??一. 路由跳轉 ??在uniapp中,路由跳轉是指通過改變頁面url的方式來跳轉到不同的頁面。uni-app提供了一套路由跳轉的API,包…

Vue中 this.$emit() 方法詳解, 幫助子組件向父組件傳遞事件

this.$emit()是 Vue.js 中一個很有用的方法,可以幫助子組件向父組件傳遞事件1、原理說明:在Vue中,this.$emit()方法用于觸發自定義事件。它是Vue實例的一個方法,可以在組件內部使用。使用 this.$emit() 方法,可以向父組件發送自定…

BUCK電路的環路補償

芯片的COMP腳是用來設計環路補償用的,它給芯片內部的誤差放大器的輸出和PWM控制器輸入做補償,如果環路補償設計得不好,會更容易引起環路的不穩定或振蕩,也可能導致輸出電壓異常。環路補償涉及三個指標:剪切頻率&#x…

Hyperledger Fabric官方中文教程-改進筆記(十六)-策略(policy)

本Fabric中文文檔專欄的閱讀前言:前言 文章目錄什么是策略為什么需要策略策略如何實現訪問控制列表 (ACLs)智能合約背書政策修改策略如何在 Fabric 中編寫策略Signature policiesImplicitMeta policies例子: 通道配置策略Organizations 部分Application部分Fabric 鏈…

Flutter性能優化完全指南:構建流暢應用的實用策略

Flutter性能優化完全指南:構建流暢應用的實用策略 探索從UI構建到內存管理的全方位優化技巧,打造如絲般順滑的Flutter體驗 引言 在跨平臺開發領域,Flutter以其出色的性能表現脫穎而出。然而,正如任何強大的框架一樣,不…

jvm對象內存占用

歡迎訪問我的主頁: https://heeheeaii.github.io/ 在Java虛擬機(JVM)中,一個對象在內存中的存儲布局可以分為三個部分:對象頭(Object Header)、實例數據(Instance Data)和對齊填充…

嵌入式系統中mcu寄存器分類劃分

目錄一、 按行為特性分類二、 按功能角色分類(更宏觀的角度)總結與注意事項在32位單片機(尤其是基于ARM Cortex-M系列內核的)中,寄存器的種類可以按照其“行為模式”和“功能”來進行分類。以下是32位單片機&#xff0…