2015-11-08 122 views
0

以下代碼的主要想法是比較兩個日期,精度爲1分鐘。Calendar.before()返回錯誤的值

rc是參考時間和tc是一次考驗:

// Checking precision of 1 minute 
Calendar upperBound, lowerBound; 
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm"); 

upperBound = (Calendar)rc.clone(); 
upperBound.add(Calendar.MINUTE, 1); 
lowerBound = (Calendar)rc.clone(); 
lowerBound.add(Calendar.MINUTE, -1); 

//Actual values 
System.out.println("test "+dateFormat.format(tc.getTime())); 
System.out.println("UpperB"+dateFormat.format(upperBound.getTime())); 
System.out.println("LowerB "+dateFormat.format(lowerBound.getTime())); 
//Tests 
System.out.println("test after "+tc.after(lowerBound)); 
System.out.println("test before "+tc.before(upperBound)); 

和輸出如下:

test 05/10/2015 09:43. 

UpperB 05/10/2015 09:44. 

LowerB 05/10/2015 09:42. 

test after false. 

test before true. 

我很困惑,因爲在Calendar.after()比較測試日期的下限返回false,它應該是true之前打印的日期。

任何想法,也許我做錯了什麼?

+0

什麼'rc'和'tc'?他們在哪裏定義?你嘗試過不同的格式嗎?這些時間是下午還是上午? – toniedzwiedz

+0

打印每個日曆的getTimeInMillis()時會看到什麼? – Nitek

+2

由於@toniedzwiedz問... rc被克隆,但tc被測試。 – yasd

回答

0

測試使用JDK 1.8:

 Calendar tc = Calendar.getInstance(); 
     Calendar rc = Calendar.getInstance(); 

     Calendar upperBound, lowerBound; 
     DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm"); 

     upperBound = (Calendar) rc.clone(); 
     upperBound.add(Calendar.MINUTE, 1); 
     lowerBound = (Calendar) rc.clone(); 
     lowerBound.add(Calendar.MINUTE, -1); 

     //Actual values 
     System.out.println("test " + dateFormat.format(tc.getTime())); 
     System.out.println("UpperB " + dateFormat.format(upperBound.getTime())); 
     System.out.println("LowerB " + dateFormat.format(lowerBound.getTime())); 
     //Tests 
     System.out.println("test after " + tc.after(lowerBound)); 
     System.out.println("test before " + tc.before(upperBound)); 

輸出:

test 08/11/2015 05:34 
UpperB 08/11/2015 05:35 
LowerB 08/11/2015 05:33 
test after true 
test before true 
+2

這不是一個答案。 – RealSkeptic

+0

它證明了所有的作品 – Rustam

+2

這仍然不是一個答案。 「適用於我的Java 8」可以作爲對問題的評論而添加,而不是作爲答案。 – RealSkeptic