我正在使用 Kotlin 開發一個 Android 專案,我們需要對來自設備和后端的日期執行驗證。到目前為止,我們一直在使用 Date 類來表示日期,使用 SimpleDateFormat 類來決議字串和格式化日期,以及使用 Calendar 類對日期執行操作,例如從 x 天前獲取日期等等。我遇到過一些資源,這些資源指出處理日期的正確方法是使用 java.time 包(LocalDateTime、LocalTime 等類)。我有興趣確切知道處理日期的正確方法(從決議到格式化)以及是否需要考慮時區。我見過類似的問題,但沒有一個能真正概括我想知道的內容。
uj5u.com熱心網友回復:
正確的作業方式
要正確處理日期和時間,您需要了解日期和時間是什么以及它們在用戶的現實生活中的行為方式。正確作業與使用這個或其他庫類無關。根據您所做的作業,您需要了解閏年和/或儒略歷、格里高利歷和預測格里高利歷和/或許多不同的太陽歷和農歷系統。
要正確處理時間,幾乎沒有辦法避免考慮時區。對于時區的介紹,我推薦我在底部鏈接的視頻。它很有趣,并且很好地解釋了基礎知識。
推薦使用的庫類
絕對推薦使用 java.time,現代 Java 日期和時間 API,用于您的日期和時間作業。與 Java 1.0 和 1.1 中過時的日期和時間類相比,一些區別是:
- 舊類假裝有些事情很簡單實際上并不簡單,一些程式員沒有意識到正確處理日期和時間的復雜性,并在他們的代碼中留下了未被發現的錯誤。在許多情況下,現代類迫使程式員決定我們想要什么,為無意錯誤留下的空間要小得多。我們必須決定是需要日期還是時間或兩者兼而有之,我們需要哪個時區,等等。
- 同樣,舊類假裝日期和時間相同,可以考慮有或沒有時區,這是不正確的。相信它會在極端情況下導致各種錯誤。使用java.time你需要之間做出選擇
LocalDate,Instant,ZonedDateTime和許多其他日期時間類,可以在第一覺得麻煩,但會使你的代碼更清晰,提高的機會,這也是正確的。 - 在許多情況下,舊類接受垃圾輸入/引數,再次允許明顯錯誤未被發現。現代類在驗證方面做得更多。
- 舊類通常不是執行緒安全的。現代人是。
鏈接
- YouTube 視頻:時間和時區問題 - Computerphile
- Oracle 教程:日期時間
- Oracle 技術文章Java SE 8 日期和時間
- 還在使用 java.util.Date 嗎?別!關于編程提示
- Java 日期和時間 API 有什么問題?[關閉]
- Jon Skeet 對Java 日歷中為什么一月是 0 月的回答?; 有趣的部分是答案后半部分的編輯
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/338350.html
