2014-01-20 184 views
1

我想清除使用Java日曆日期的時間部分。這是基於其他計算器解決方案的代碼:奇怪的java.util.calendar輸出

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?我只想讓我的Date對象的時間爲00:00:00

+1

你應該使用'set(field,0)'而不是清除。 – assylias

回答

2

javadocCalendar.clear的:

的HOUR_OF_DAY,HOUR和AM_PM字段的獨立處理和 了爲解決規則一天的時間適用。清除字段中的一個 不會重置此日曆的小時數值。 使用設置(Calendar.HOUR_OF_DAY,0)重置小時值。

所以不是clear使用:

cal.set(Calendar.HOUR_OF_DAY, 0) 

clear是不實際結算hour值,因此這麼多亂搞格式化!

+0

是的,你是對的。 'set()'爲我工作。謝謝。 –

+0

這是'Calender'裏面的一種隱藏的真理,邏輯上你正在嘗試正確的事情:),接受答案,如果它爲你工作。 – harsh

+0

是的,8分鐘的stackoverflow障礙:-) –

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 
+0

我也試過這個。它的輸出相同。仍然顯示12:00:00 –

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