奇怪的java.util.calendar输出

时间:2014-01-20 10:53:44

标签: java

我正在尝试使用Java日历清除日期中的时间部分。以下是基于其他stackoverflow解决方案的代码:

Calendar cal = Calendar.getInstance();
// cal.setTime(new Date());
cal.clear(Calendar.HOUR);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
// cal.clear(Calendar.ZONE_OFFSET);
cal.clear(Calendar.HOUR_OF_DAY);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.format(cal.getTime());
System.out.println(dateFormat.format(cal.getTime()));
System.out.println(cal.getTime());

但目前的输出是:2014-01-20 12:00:00

可能是什么原因?为什么时间显示12:00:00?我只希望我的日期对象有一个时间00:00:00

3 个答案:

答案 0 :(得分:4)

日期/日历正常,错误在您的格式字符串中:

  • hh :表示12小时时间格式
  • HH :表示24小时时间格式

更正格式字符串:

yyyy-MM-dd HH:mm:ss

输出:

2014-01-20 00:00:00
Mon Jan 20 00:00:00 CET 2014

答案 1 :(得分:2)

根据javadoc的{​​{1}}:

  

HOUR_OF_DAY,HOUR和AM_PM字段是独立处理的   应用了时间的解决规则。清除一个   这些字段不会重置此日历的小时值。   使用set(Calendar.HOUR_OF_DAY,0)重置小时值。

所以代替Calendar.clear使用:

clear

cal.set(Calendar.HOUR_OF_DAY, 0) 实际上并没有清除clear值,因此格式化程序如此混乱!

答案 2 :(得分:0)

这样做

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);


    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    dateFormat.format(cal.getTime());
    System.out.println(dateFormat.format(cal.getTime()));
    System.out.println(cal.getTime());