请问下   Calendar cal=calendar.getInstance();
         cal.set(2004, 1, 7, 15, 40);
         System.out.println(cal.get(cal.HOUR_OF_DAY));
         System.out.println(cal.HOUR_OF_DAY);
输出是   15
         11
 HOUR_OF_DAY
  get 和 set 的字段数字,指示一天中的小时。HOUR_OF_DAY 用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY 为 22
 get
  返回给定日历字段的值。在 lenient 模式下,所有日历字段都被标准化。在 non-lenient 模式下,所有日历字段都是经过验证的,如果任何日历字段有超出范围的值,则此方法抛出一个异常。标准化和验证都是通过 complete() 方法处理的,这个过程与日历系统有关。
      
         :问下为什么一般用时要cal.get(cal.HOUR_OF_DAY) 从API中看的话HOUR_OF_DAY也可以啊!但是输出就是不一样啊,而是11啊!

解决方案 »

  1.   


    Calendar.HOUR_OF_DAY 系统时间
    Calendar cal = Calendar.getInstance();
    cal.set(2004, 1, 7, 15, 40);
    cal.get(cal.HOUR_OF_DAY);给定日历字段的值
      

  2.   

    System.out.println(cal.get(cal.HOUR_OF_DAY)); 
    System.out.println(cal.HOUR_OF_DAY);
    //HOUR_OF_DAY是Calendar类的一个常量,所以System.out.println(cal.HOUR_OF_DAY);是输出这个常量的值,而cal.get(cal.HOUR_OF_DAY)表示从cal中取出HOUR_OF_DAY所指向的领域的值,所以结果是不一样的
      

  3.   

    System.out.println(cal.HOUR_OF_DAY);
    这个写法其实应该会有警告的,因为它等同于System.out.println(Calendar.HOUR_OF_DAY);这个只是一个固定的静态变量,与cal中实际的时间没有任何关系
      

  4.   

    那那个API所说的的就感觉让我很费解,HOUR_OF_DAY:get 和 set 的字段数字,指示一天中的小时。HOUR_OF_DAY 用于 24 小时制时钟。例如,在 10:04:15.250 PM 这一时刻,HOUR_OF_DAY 为 22
      

  5.   

    你还是不清楚,你写cal.HOUR_OF_DAY根本是错误的!!!应该是Calendar.HOUR_OF_DAY因为它是一个静态变量而已,它的作用就是为了给cal.set、get、add方法用的,而不是给你打印它的值的!!!
      

  6.   

    Calendar.HOUR_OF_DAY是给方法用的set,get add 等,我只是想要明白其中这个值是什么值,这个值是由于get方法的加工而出来我们想要的值 是吗?
      

  7.   

    这个只是一个常量,可以方便add、set、get方法中可以知道你到底想取哪个属性了!get方法不会加工这个值,而是在它的实现中判断你到底传递了什么值进来!在它的实现中就是要根据你传递进来的值来知道你想设置或者想取哪个值而已
      

  8.   

    例如在add方法中,它会判断如果field == YEAR则知道你想改变的是YEAR这个属性,它会有相应的逻辑进行处理,其它常量的也一样
      

  9.   

    其实换句话说,这些变量其实纯粹是为了使得Calendar中的方法数量不要太多而已如果没有这些变量,则Calendar中需要定义这些方法
    getYear、getMonth、getDate、getHour、getMinute、getSecond、getWeekOfMonth、getDayOfWeek、getDayOfYear等等所以Calendar中才定义了这些变量使得它们全部改成一个方法get(field),然后根据你传递的field参数就知道实际等同于上述的那些方法中的某一个