W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
\1. 【強制】日期格式化時,傳入 pattern
中表示年份統(tǒng)一使用小寫的 y
。
說明:日期格式化時,yyyy 表示當(dāng)天所在的年,而大寫的 YYYY 代表是 week in which year(JDK7 之后引入的概念),意思是當(dāng)天所在的周屬于的年份,一周從周日開始,周六結(jié)束,只要本周跨年,返回的 YYYY 就是下一年。
正例:表示日期和時間的格式如下所示:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
\2. 【強制】在日期格式中分清楚大寫的 M
和小寫的 m
,大寫的 H
和小寫的 h
分別指代的意義。
說明:日期格式中的這兩對字母表意如下:
? 1) 表示月份是大寫的 M
;
? 2) 表示分鐘則是小寫的 m
;
? 3) 24 小時制的是大寫的 H
;
? 4) 12 小時制的則是小寫的 h
。
\3. 【強制】獲取當(dāng)前毫秒數(shù):System.currentTimeMillis()
; 而不是 new Date().getTime()
。
說明:如果想獲取更加精確的納秒級時間值,使用 System.nanoTime 的方式。在 JDK8 中,針對統(tǒng)計時間等場景,推薦使用 Instant 類。
\4. 【強制】不允許在程序任何地方中使用:
? 1)java.sql.Date
。
? 2)java.sql.Time
。
? 3)java.sql.Timestamp
。
說明:第 1 個不記錄時間,getHours()拋出異常;第 2 個不記錄日期,getYear()拋出異常;第 3 個在構(gòu)造方法 super((time/1000)*1000),在 Timestamp 屬性 fastTime 和 nanos 分別存儲秒和納秒信息。
反例: java.util.Date.after(Date)進(jìn)行時間比較時,當(dāng)入?yún)⑹?java.sql.Timestamp 時,會觸發(fā) JDK BUG(JDK9 已修復(fù)),可能導(dǎo)致比較時的意外結(jié)果。
\5. 【強制】不要在程序中寫死一年為 365 天,避免在公歷閏年時出現(xiàn)日期轉(zhuǎn)換錯誤或程序邏輯錯誤。
正例:
// 獲取今年的天數(shù)
int daysOfThisYear = LocalDate.now().lengthOfYear();
// 獲取指定某年的天數(shù)
LocalDate.of(2011, 1, 1).lengthOfYear();
反例:
// 第一種情況:在閏年 366 天時,出現(xiàn)數(shù)組越界異常
int[] dayArray = new int[365];
// 第二種情況:一年有效期的會員制,今年 1 月 26 日注冊,硬編碼 365 返回的卻是 1 月 25 日
Calendar calendar = Calendar.getInstance();
calendar.set(2020, 1, 26);
calendar.add(Calendar.DATE, 365);
\6. 【推薦】避免公歷閏年 2 月問題。閏年的 2 月份有 29 天,一年后的那一天不可能是 2 月 29日。
\7. 【推薦】使用枚舉值來指代月份。如果使用數(shù)字,注意 Date
,Calendar
等日期相關(guān)類的月份 month
取值在 0-11
之間。
說明:參考 JDK 原生注釋,Month value is 0-based. e.g., 0 for January.
正例: Calendar.JANUARY,Calendar.FEBRUARY,Calendar.MARCH 等來指代相應(yīng)月份來進(jìn)行傳參或比較。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: