2012-07-01 247 views
1

我從Web服務獲取日期,dd/mm/yyyy hh:mi:ss。 像這樣:10/10/2011 12:00:00日期比較

而且,我試圖驗證這個日期是否來自實際日期之前,但是當我無法與「if」進行比較時。

代碼:

private static Date formatDate(String data) throws Exception{ 
    if (data == null || data.equals("")){ 
     return null; 
    } 

    Date date = null; 
    try { 
     DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); 
     date = (java.util.Date)formatter.parse(data); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return date; 
    } 

我的方法比較:

Date planeDate = null; 
    try { 
    planeDate = formatDate(date); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    Calendar currentcal = Calendar.getInstance(); 
    currentcal.set(currentcal.get(Calendar.DAY_OF_MONTH), 
       currentcal.get(Calendar.MONTH), 
       currentcal.get(Calendar.YEAR), 
       currentcal.get(Calendar.HOUR_OF_DAY), 
       currentcal.get(Calendar.MINUTE), 
       currentcal.get(Calendar.SECOND)); 

    Date current = currentcal.getTime(); 

     //Always return false 
    if(planeDate != null){ 
     if(planeDate.before(current) || planeDate.equals(current)){ 
      return true; 
     } else { 
      return false; 
     } 
    } 
    return false; 
+0

查看我的回答。 –

回答

0

您的代碼實例化一個日曆對象具有不正確的參數順序。因此是錯誤的結果。

set方法的正確的簽名是這樣的:
public final void set(int year, int month, int date, int hourOfDay, int minute, int second)

您的設置方法的代碼在不同的順序參數如下:

currentcal.set(currentcal.get(Calendar.DAY_OF_MONTH), 
       currentcal.get(Calendar.MONTH), 
       currentcal.get(Calendar.YEAR), 
       currentcal.get(Calendar.HOUR_OF_DAY), 
       currentcal.get(Calendar.MINUTE), 
       currentcal.get(Calendar.SECOND)); 

因此,您的日曆實例的實際返回日期對象如下:

Mon Jan 02 18:50:36 GMT+05:30 8 

其中應該實際上是一些東西靠近

Mon Jul 02 18:50:56 GMT+05:30 2012 

更改set方法輸入如下,然後比較日期。那麼它應該工作。

currentcal.set(
    currentcal.get(Calendar.YEAR), 
    currentcal.get(Calendar.MONTH), 
    currentcal.get(Calendar.DAY_OF_MONTH), 
    currentcal.get(Calendar.HOUR_OF_DAY), 
    currentcal.get(Calendar.MINUTE), 
    currentcal.get(Calendar.SECOND) 
);