下面这段代码感觉输出的应该是:某年某月某日 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()));
解决方案 »
- myeclipse10.0
- 流OR三大框架
- Timer 主程序不能结束问题
- sql语句单独能运行 但是放到代码里就不行了 是怎么回事
- struts2的validation.xml里解析正则表达式的问题
- 关于使用2个JSF<h:selectManyListbox>组件的问题
- 如何在velocity中加入自定义的java object来使用??
- 想请大家帮我设置一下环境变量
- 怎样使用ant 从cvs 服务器上checkout
- 使用struts标签库:怎么把<bean:message key=""/>读出来的内容放到一个标签的属性中,如:<template:put name='title' content=(bean读出
- 分享下怎么把swt嵌入到swing中,另外再问点问题
- jsp小问题求教
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 小时制时钟