下面这段代码感觉输出的应该是:某年某月某日 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()));
但是输出的却是:第二天的 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()));
HOUR 用于 12 小时制时钟
HOUR_OF_DAY 用于 24 小时制时钟
比如我set(Calendar.HOUR,14),按照你的说法是在12的基础上加14然后再计算得出时间对吧
如果用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()));
如果用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()));
如果用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()));
不是那么加的。
你可以理解这里HOUR那种就相当于12进制。
当凑够12小时的时候,天就加一,所以你那个是第二天。
你设置23,凑够12之后还剩下11,因此你控制台输出的就是第二天的11点59分59秒
HOUR 用于 12 小时制时钟 (0 - 11)。
中午和午夜用 0 表示,不用 12 表示。
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()));
如果当前是上午,那么输出的时间应该是0点
如果当前是下午,那么输出的时间应该是12点
我试了试,还没看源码,大概猜出怎么回事了我猜应该是以中午12点作为开始值,然后与set的值相加,然后再对得到的结果进行计算,试了好几个值应该是这样
恩,如果是上午 就按 0点与set的值设置偏移量
如果是下午就按12点与set值相设置偏移量。
如果想显示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()));
HOUR 用于 12 小时制时钟
HOUR_OF_DAY 用于 24 小时制时钟