下面这段代码感觉输出的应该是:某年某月某日 23:59:59
但是输出的却是:第二天的 11:59:59
为什么呢,看了api感觉有点晕 Calendar jssj = Calendar.getInstance();
System.out.println(jssj.getTime());
System.out.println(params.getJssj());
jssj.setTime(params.getJssj());
jssj.set(Calendar.HOUR, 23);
jssj.set(Calendar.MINUTE, 59);
jssj.set(Calendar.SECOND, 59);
System.out.println(new Timestamp(jssj.getTimeInMillis()));

解决方案 »

  1.   

    jssj.set(Calendar.HOUR_OF_DAY, 23);
    HOUR 用于 12 小时制时钟
    HOUR_OF_DAY 用于 24 小时制时钟
      

  2.   


    比如我set(Calendar.HOUR,14),按照你的说法是在12的基础上加14然后再计算得出时间对吧
      

  3.   

    改成下面就好了,设置小时的时候,用Calendar.HOUR_OF_DAY这样用的是24小时
    如果用Calendar.HOUR用的12小时的,分上午下午的,问题也就在这里 Calendar jssj = Calendar.getInstance();
            System.out.println(jssj.getTime());
            System.out.println(params.getJssj());
            jssj.setTime(params.getJssj());
            jssj.set(Calendar.HOUR_OF_DAY, 23);//这里修改
            jssj.set(Calendar.MINUTE, 59);
            jssj.set(Calendar.SECOND, 59);
            System.out.println(new Timestamp(jssj.getTimeInMillis()));
      

  4.   

    改成下面就好了,设置小时的时候,用Calendar.HOUR_OF_DAY这样用的是24小时
    如果用Calendar.HOUR用的12小时的,分上午下午的,问题也就在这里 Calendar jssj = Calendar.getInstance();
            System.out.println(jssj.getTime());
            System.out.println(params.getJssj());
            jssj.setTime(params.getJssj());
            jssj.set(Calendar.HOUR_OF_DAY, 23);//这里修改
            jssj.set(Calendar.MINUTE, 59);
            jssj.set(Calendar.SECOND, 59);
            System.out.println(new Timestamp(jssj.getTimeInMillis()));
      

  5.   

    改成下面就好了,设置小时的时候,用Calendar.HOUR_OF_DAY这样用的是24小时
    如果用Calendar.HOUR用的12小时的,分上午下午的,问题也就在这里 Calendar jssj = Calendar.getInstance();
            System.out.println(jssj.getTime());
            System.out.println(params.getJssj());
            jssj.setTime(params.getJssj());
            jssj.set(Calendar.HOUR_OF_DAY, 23);//这里修改
            jssj.set(Calendar.MINUTE, 59);
            jssj.set(Calendar.SECOND, 59);
            System.out.println(new Timestamp(jssj.getTimeInMillis()));
      

  6.   


    不是那么加的。
    你可以理解这里HOUR那种就相当于12进制。
    当凑够12小时的时候,天就加一,所以你那个是第二天。
    你设置23,凑够12之后还剩下11,因此你控制台输出的就是第二天的11点59分59秒
      

  7.   


    HOUR 用于 12 小时制时钟 (0 - 11)。
    中午和午夜用 0 表示,不用 12 表示。
      

  8.   

    这个。可是结果输出的的确是12:00:00让我这个工作两年的人情何以堪啊 Calendar kssj = Calendar.getInstance();
    kssj.setTime(params.getKssj());
    kssj.set(Calendar.HOUR, 0);
    kssj.set(Calendar.MINUTE, 0);
    kssj.set(Calendar.SECOND, 0);
                System.out.println(new Timestamp(kssj.getTimeInMillis()));
    params.setKssj(new Timestamp(kssj.getTimeInMillis()));
      

  9.   

    kssj.set(Calendar.HOUR, 0);
    如果当前是上午,那么输出的时间应该是0点
    如果当前是下午,那么输出的时间应该是12点
      

  10.   


    我试了试,还没看源码,大概猜出怎么回事了我猜应该是以中午12点作为开始值,然后与set的值相加,然后再对得到的结果进行计算,试了好几个值应该是这样
      

  11.   


    恩,如果是上午 就按 0点与set的值设置偏移量
    如果是下午就按12点与set值相设置偏移量。
      

  12.   

    我看了一下API原来0表示的是中午和午夜
    如果想显示11点就需要为设置为-1 Calendar jssj = Calendar.getInstance();
    jssj.set(Calendar.HOUR, -1);
    jssj.set(Calendar.MINUTE, 59);
    jssj.set(Calendar.SECOND, 59);
    System.out.println(new Timestamp(jssj.getTimeInMillis()));
    不过你可以用这种方法比较直观Calendar calendar = new GregorianCalendar(1987,9,4,12,59,59);//1987-10-4
    System.out.println(new Timestamp(calendar.getTimeInMillis()));
      

  13.   

    C#飘过,不过,知道了这个问题怎么解决了jssj.set(Calendar.HOUR_OF_DAY, 23);
    HOUR 用于 12 小时制时钟
    HOUR_OF_DAY 用于 24 小时制时钟