奇怪的java.util.calendar输出

奇怪的java.util.calendar输出,java,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(Ca

我正在尝试使用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

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

yyyy-MM-dd HH:mm:ss
  • hh:表示12小时时间格式
  • HH:表示24小时时间格式
正确的格式字符串:

yyyy-MM-dd HH:mm:ss
输出:

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

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

yyyy-MM-dd HH:mm:ss
  • hh:表示12小时时间格式
  • HH:表示24小时时间格式
正确的格式字符串:

yyyy-MM-dd HH:mm:ss
输出:

2014-01-20 00:00:00
Mon Jan 20 00:00:00 CET 2014
你喜欢这样吗

    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());
你喜欢这样吗

    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());

根据
日历的
javadoc
。清除

每天的小时、小时和上午下午字段是独立处理的 将应用一天中某个时间的解析规则。清零一号 其中的字段不会重置此日历的小时值。 使用set(Calendar.HOUR\u OF_DAY,0)重置小时值

因此,不要使用
clear

cal.set(Calendar.HOUR_OF_DAY, 0)

clear
实际上并没有清除
hour
值,因此在格式化程序上有很多混乱

根据
日历的
javadoc
。清除

每天的小时、小时和上午下午字段是独立处理的 将应用一天中某个时间的解析规则。清零一号 其中的字段不会重置此日历的小时值。 使用set(Calendar.HOUR\u OF_DAY,0)重置小时值

因此,不要使用
clear

cal.set(Calendar.HOUR_OF_DAY, 0)

clear
实际上并没有清除
hour
值,因此在格式化程序上有很多混乱

你应该使用
set(field,0)
而不是clear。你应该使用
set(field,0)
而不是clear。这是
calendar
中隐藏的事实,从逻辑上讲,你是在尝试正确的事情:),如果答案对你有效,就接受它。是的,当然,8分钟的stackoverflow障碍:-)这是一种隐藏在日历中的真相,从逻辑上讲,你在尝试正确的事情:),如果它对你有效,接受答案。是的,当然,8分钟的stackoverflow障碍:-)