int Hour = Calendar.getInstance(TimeZone.getTimeZone("Asia/Beijing")).get(Calendar.HOUR);
我用的这个办法获取的时间,但是不是本地的小时数;
后来我又用System.out.println(Calendar.getInstance())输出了一下,发现输出结果如下:
java.util.GregorianCalendar[time=1314883628578,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=8,WEEK_OF_YEAR=36,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=244,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=9,HOUR_OF_DAY=21,MINUTE=27,SECOND=8,MILLISECOND=578,ZONE_OFFSET=28800000,DST_OFFSET=0]
可以看到其中的HOUR正好是本地的时间,说明Calendar.getInstance()中的时间是正确的,当时为什么我用get(Calendar.HOUR)方法提取出来的又不对了呢。求解释。

解决方案 »

  1.   

    你需要调用Calendar.get(Calendar.Calendar.HOUR_OF_DAY)
    你调用的那个是返回12小时的小时数,下午1点返回1而不是13,晓得吧?改成上面这个就是24小时的小时数
      

  2.   

    噢哦 api楼上说的比doc还详细啊
      

  3.   


    即使是12小时的数也不对啊,你看我给出的测试的Calender实例的内容中HOUR=9,HOUR_OF_DAY=21;这都是对的,但是我用.get(Calendar.HOUR)提取出来又不是9这个数了,用get(Calendar.HOUR_OF_DAY)也不是21了 
      

  4.   

    使用 TimeZone.getTimeZone("Asia/Shanghai")
    或者 TimeZone.getTimeZone("Asia/Chongqing")
    不要使用 TimeZone.getTimeZone("Asia/Beijing")
      

  5.   


    我刚刚有点武断,其实你真正的问题是时区的获取有问题,在Java里面获取中国的时间是TimeZone.getTimeZone("Asia/Shanghai")而不是TimeZone.getTimeZone("Asia/Beijing")
    你执行下面的语句试试,肯定正常了
    int hour = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai")).get(Calendar.HOUR_OF_DAY);
            //int hour = Calendar.getInstance(TimeZone.getTimeZone("Asia/Beijing")).get(Calendar.HOUR);
            System.out.println(hour);
      

  6.   

    int Hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
    System.out.println(Calendar.getInstance());
    System.out.println(Hour);
    这样输出的就是一样的了。(至少我的是这样的)
      

  7.   

    TimeZone.getAvailableIDs() 返回结果中 Asia 只有: