zoukankan      html  css  js  c++  java
  • 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 操作实测都是一样的了。 就是小时数量。两种类型没差。


    如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的

  • 相关阅读:
    mac md5/base64 终端处理 及文件处理js
    ag(Silver Searcher)查找文件
    js压缩之uglify-js
    iReport Designer在mac下打不开
    mac新建批处理文件,双击启动.sh文件
    将本地文件夹添加到Git仓库
    vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法
    Vue3-js 学习笔记
    Vue2.x 常用功能和方法
    typescript 编译报错 不能用于索引类型
  • 原文地址:https://www.cnblogs.com/ElEGenT/p/13322903.html
Copyright © 2011-2022 走看看