Calendar.HOUR 和 Calendar.HOUR_OF_DAY

區別

/**
    * Field number for <code>get</code> and <code>set</code> indicating the
    * hour of the morning or afternoon. <code>HOUR</code> is used for the
    * 12-hour clock (0 - 11). Noon and midnight are represented by 0, not by 12.
    * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10.

    當用這個字段獲取到的小時數,是指上午或下午的。HOUR 是用在12小時制的時鐘。當中午和凌晨的時候,會再從0計數,不是12.
    例如: 10:04:15.250 PM , HOUR 字段值是 10。
    *
    * @see #AM_PM
    * @see #HOUR_OF_DAY
    */
public final static int HOUR = 10;

/**
    * Field number for <code>get</code> and <code>set</code> indicating the
    * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock.
    * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22.
    *

    用這個字段獲取到的小時數,是指整天的。 HOUR_OF_DAY 是用在24小時制的時鐘。
    例如:10:04:15.250 PM , HOUR_OF_DAY 字段值是 22 

    * @see #HOUR
    */
public final static int HOUR_OF_DAY = 11;

兩個表示不一樣 , HOUR 是 12 小時制 , HOUR_OF_DAY 是24小時制 。

Get

源代碼的註釋中已經給了GET 的例子 。

  • HOUR 是 12小時制 ,獲取到的是 12 小時制的數值
  • HOUR_OF_DAY 是 24 小時制,獲取到的是 24 小時制的數值

Set

這需要好好說道一下。 因爲12小時制很迷惑人。
針對 HOUR_OF_DAY 舉例子看一下 :

Calendar c = Calendar.getInstance();
//當前時間 2020-07-16 10:04:15
c.set(Calendar.HOUR_OF_DAY,2); //2020-07-16 02:04:15
c.set(Calendar.HOUR_OF_DAY,12); //2020-07-16 12:04:15
c.set(Calendar.HOUR_OF_DAY,18); //2020-07-16 18:04:15
c.set(Calendar.HOUR_OF_DAY,22); //2020-07-16 22:04:15
c.set(Calendar.HOUR_OF_DAY,24); //2020-07-17 00:04:15  , 這裏已經是第二天了
c.set(Calendar.HOUR_OF_DAY,28); //2020-07-17 04:04:15  , 這裏已經是第二天了
c.set(Calendar.HOUR_OF_DAY,36); //2020-07-17 12:04:15  , 這裏已經是第二天了
c.set(Calendar.HOUR_OF_DAY,48); //2020-07-18 00:04:15  , 這裏已經是第三天了
c.set(Calendar.HOUR_OF_DAY,60); //2020-07-18 12:04:15  , 這裏已經是第三天了
c.set(Calendar.HOUR_OF_DAY,72); //2020-07-19 00:04:15  , 這裏已經是第四天了

以上例子可以看出來,當設置的數值 < 24, 就當天的時間,當設置的數值 >= 24,就不是當天的了,而是後面的時間了。

從上面也可以看出規律 :

往後的天數(24小時區間) = 設置的數值 / 24

針對 HOUR 舉個例子看一下:

//當前時間 10:04:15
Calendar c = Calendar.getInstance();
//當前時間 2020-07-16 10:04:15 , 這是【上午】的時間
c.set(Calendar.HOUR,2);    //2020-07-16 02:04:15 
c.set(Calendar.HOUR,8);    //2020-07-16 08:04:15 
c.set(Calendar.HOUR,11);   //2020-07-16 11:04:15 
c.set(Calendar.HOUR,12);   //2020-07-16 12:04:15 , 這是【中午】的時間
c.set(Calendar.HOUR,14);   //2020-07-16 14:04:15 , 這是【下午】的時間
c.set(Calendar.HOUR,18);   //2020-07-16 18:04:15 , 這是【下午】的時間
c.set(Calendar.HOUR,23);   //2020-07-16 23:04:15 , 這是【下午】的時間
c.set(Calendar.HOUR,24);   //2020-07-17 00:04:15 , 這是第二天【上午】的時間
c.set(Calendar.HOUR,28);   //2020-07-17 04:04:15 , 這是第二天【上午】的時間
c.set(Calendar.HOUR,36);   //2020-07-17 12:04:15 , 這是第二天【中午】的時間
c.set(Calendar.HOUR,48);   //2020-07-18 00:04:15 , 這是第三天【上午】的時間

//當前時間 2020-07-16 22:04:15 , 這是【下午】的時間
c.set(Calendar.HOUR,2);    //2020-07-16 14:04:15 
c.set(Calendar.HOUR,8);    //2020-07-16 20:04:15 
c.set(Calendar.HOUR,11);   //2020-07-16 23:04:15 
c.set(Calendar.HOUR,12);   //2020-07-17 00:04:15 , 這是第二天【上午】的時間
c.set(Calendar.HOUR,14);   //2020-07-17 02:04:15 , 這是第二天【上午】的時間
c.set(Calendar.HOUR,18);   //2020-07-17 06:04:15 , 這是第二天【上午】的時間
c.set(Calendar.HOUR,23);   //2020-07-17 11:04:15 , 這是第二天【上午】的時間
c.set(Calendar.HOUR,24);   //2020-07-17 12:04:15 , 這是第二天【中午】的時間
c.set(Calendar.HOUR,28);   //2020-07-17 16:04:15 , 這是第二天【下午】的時間
c.set(Calendar.HOUR,36);   //2020-07-18 00:04:15 , 這是第三天【上午】的時間
c.set(Calendar.HOUR,48);   //2020-07-18 12:04:15 , 這是第三天【中午】的時間

第一眼從表象上看,

【上午】的時間設置小時,跟24小時製得到的結果是一樣的。

【下午】的時間設置小時,就不一樣了。

總結規律就可以看出來,設置的數值 < 12 ,得到的是當前半天的小時數。上午得到是上午的小時數(從0點開始算),下午得到的是下午的小時數(從12點開始算)。

設置數值 >= 12 。是下個12小時區間的值。對比上面的24小時制,可以得到規律 :

往後的半天數(12小時區間) = 設置的數值 / 12

所以上午是按上午的時間 , 下午是按下午的時間。 我遇到的坑:神奇的【時間】問題

add

add 操作實測都是一樣的了。 就是小時數量。兩種類型沒差。


如果文章有幫助到您,請點個贊,您的反饋會讓我感到文章是有價值的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章