区别
/**
* 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 操作实测都是一样的了。 就是小时数量。两种类型没差。
如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的