阿里開發手冊泰山版學習筆記五、編程規約-日期時間

  1. 【強制】日期格式化時,傳入 pattern 中表示年份統一使用小寫的 y。
    說明:日期格式化時,yyyy 表示當天所在的年,而大寫的 YYYY 代表是 week in which year(JDK7 之後引入的概念),意思是當天所在的周屬於的年份,一週從週日開始,週六結束,只要本週跨年,返回的 YYYY就是下一年。
    正例:表示日期和時間的格式如下所示:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  1. 【強制】在日期格式中分清楚大寫的 M 和小寫的 m,大寫的 H 和小寫的 h 分別指代的意義。
    說明:日期格式中的這兩對字母表意如下:
    1) 表示月份是大寫的 M;
    2) 表示分鐘則是小寫的 m;
    3) 24 小時制的是大寫的 H;
    4) 12 小時制的則是小寫的 h。

  2. 【強制】獲取當前毫秒數:System.currentTimeMillis(); 而不是 new Date().getTime()。
    說明:如果想獲取更加精確的納秒級時間值,使用 System.nanoTime 的方式。在 JDK8 中,針對統計時間
    等場景,推薦使用 Instant 類。

  3. 【強制】不允許在程序任何地方中使用:
    1)java.sql.Date
    2)java.sql.Time
    3)java.sql.Timestamp。
    說明:第 1 個不記錄時間,getHours()拋出異常;第 2 個不記錄日期,getYear()拋出異常;第 3 個在構造方法super((time/1000)*1000),fastTime 和 nanos 分開存儲秒和納秒信息。
    反例: java.util.Date.after(Date)進行時間比較時,當入參是 java.sql.Timestamp 時,會觸發 JDKBUG(JDK9 已修復),可能導致比較時的意外結果。

  4. 【強制】不要在程序中寫死一年爲 365 天,避免在公曆閏年時出現日期轉換錯誤或程序邏輯錯誤。

正例:

// 獲取今年的天數
int daysOfThisYear = LocalDate.now().lengthOfYear();
// 獲取指定某年的天數
LocalDate.of(2011, 1, 1).lengthOfYear();

反例:

// 第一種情況:在閏年 366 天時,出現數組越界異常
int[] dayArray = new int[365];
// 第二種情況:一年有效期的會員制,今年 1 月 26 日註冊,硬編碼 365 返回的卻是 1 月 25 日
Calendar calendar = Calendar.getInstance();
calendar.set(2020, 1, 26);
calendar.add(Calendar.DATE, 365);
  1. 【推薦】避免公曆閏年 2 月問題。閏年的 2 月份有 29 天,一年後的那一天不可能是 2 月 29日。
  2. 【推薦】使用枚舉值來指代月份。如果使用數字,注意 Date,Calendar 等日期相關類的月份month 取值在 0-11 之間。
    說明:參考 JDK 原生註釋,Month value is 0-based. e.g., 0 for January.
    正例: Calendar.JANUARY,Calendar.FEBRUARY,Calendar.MARCH 等來指代相應月份來進行傳參或比較。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章