區別
/**
* 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 操作實測都是一樣的了。 就是小時數量。兩種類型沒差。
如果文章有幫助到您,請點個贊,您的反饋會讓我感到文章是有價值的