2014-10-17 69 views
1

我有兩個日期時間選擇器在我的項目,這是開始日期和結束日期, 但問題是說,如果我選擇18/10/2014開始日期,結束日期是1/11/2014,結束日期是1天爲是無效的,因爲它比第18天小的需要幫助此日期驗證android java

//start date 
    TableRow r8 = new TableRow(this); 
    TextView tvStartDate = new TextView(this); 
    tvStartDate.setText("Start Date: "); 
    final EditText etStartDate = new EditText(this); 
    etStartDate.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Calendar dateNow = Calendar.getInstance(); 
      int year = dateNow.get(Calendar.YEAR); 
      int month = dateNow.get(Calendar.MONTH); 
      int day = dateNow.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog dp; 
      dp = new DatePickerDialog(AddPetActivity.this, new OnDateSetListener() { 
       public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) { 
        // TODO Auto-generated method stub 
        selectedmonth = selectedmonth + 1; 
        etStartDate.setText("" + selectedday + "/" + selectedmonth + "/" + selectedyear); 
       } 
      }, year, month, day); 
      dp.setTitle("Select Date"); 
      dp.show(); 
     } 
    }); 
    r8.addView(tvStartDate); 
    r8.addView(etStartDate); 
    tb.addView(r8); 

    //end date 
    TableRow r9 = new TableRow(this); 
    TextView tvEndDate = new TextView(this); 
    tvEndDate.setText("End Date: "); 
    final EditText etEndDate = new EditText(this); 
    etEndDate.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Calendar dateNow = Calendar.getInstance(); 
      int year = dateNow.get(Calendar.YEAR); 
      int month = dateNow.get(Calendar.MONTH); 
      int day = dateNow.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog dp; 
      dp = new DatePickerDialog(AddPetActivity.this, new OnDateSetListener() { 
       public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) { 
        // TODO Auto-generated method stub 
        selectedmonth = selectedmonth + 1; 

        etEndDate.setText("" + selectedday + "/" + selectedmonth + "/" + selectedyear); 
       } 
      }, year, month, day); 
      dp.setTitle("Select Date"); 
      dp.show(); 
     } 
    }); 
    r9.addView(tvEndDate); 
    r9.addView(etEndDate); 
    tb.addView(r9); 

========================================================================================= 

對於驗證部開始日期和結束日期

else if (CheckDate(today, etStartDate.getText().toString()) == false) 
       Toast.makeText(getApplicationContext(), "Invalid Start Date!", Toast.LENGTH_SHORT).show(); 

      else{ 
       if (!etEndDate.getText().toString().matches("")) { 
        if (CheckDate(etStartDate.getText().toString(), etEndDate.getText().toString()) == false) 
         Toast.makeText(getApplicationContext(), "Invalid End Date!", Toast.LENGTH_SHORT).show(); 


========================================================================================= 
無效

最後部分

private boolean CheckDate(String fromDate, String toDate) 
{ 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy"); 
     Date dateFrom = null; 
     Date dateTo = null; 
     try { 
      dateFrom = sdf.parse(fromDate); 
      dateTo = sdf.parse(toDate); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    if (dateTo.after(dateFrom) == true) 
     return true; 
    else 
     return false; 
} 
+1

我不明白你的約束。 1/11是18/10之後 – njzk2 2014-10-17 18:37:42

+0

是的,開始日期是18/10,那麼結束日期是1/11,結束日期保持顯示無效日期,因爲1小於18,我必須放19才能使它有效。 – 2014-10-17 18:41:23

+0

那是因爲'mm'是分鐘,你需要'MM'一個月。 – njzk2 2014-10-17 18:58:19

回答

1

比較日期使用梅索德:Date.compareTo(AnotherDate)

這是一個簡單的例子,你可以使用它作爲方法返回的結果

try{ 

      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); //edit here 
      Date date1 = sdf.parse("2009-12-31"); 
      Date date2 = sdf.parse("2010-01-31"); 

      System.out.println(sdf.format(date1)); 
      System.out.println(sdf.format(date2)); 

      if(date1.compareTo(date2)>0){ 
       System.out.println("Date1 is after Date2"); 
      }else if(date1.compareTo(date2)<0){ 
       System.out.println("Date1 is before Date2"); 
      }else if(date1.compareTo(date2)==0){ 
       System.out.println("Date1 is equal to Date2"); 
      }else{ 
       System.out.println("How to get here?"); 
      } 

     }catch(ParseException ex){ 
      ex.printStackTrace(); 
     } 

爲您的情況:

private boolean CheckDate(String fromDate, String toDate) 
    { 
    boolean result=false; 
    try{ 

      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); //edit here 
      Date dateStart = sdf.parse(fromDate); 
      Date dateEnd = sdf.parse(toDate); 

      if(dateStart .compareTo(dateEnd)>0){ 
       System.out.println("dateStart is after dateEnd "); 
       result=false; 
      }else if(dateStart .compareTo(dateEnd)<0){ 
       System.out.println("dateStart is before dateEnd "); 
       result=true; 
      }else if(dateStart .compareTo(dateEnd)==0){ 
       System.out.println("dateStart is equal to dateEnd "); 
       result=true; 
      }else{ 
       System.out.println("How to get here?"); 
      } 

     }catch(ParseException ex){ 
      ex.printStackTrace(); 
     } 
    return result; 

    } 
+0

我得到了無效的開始日期,因爲我對開始日期的驗證與我發佈的結束日期相同。 – 2014-10-17 18:54:53

+0

else if(CheckDate(today,etStartDate.getText()。toString())== false) – 2014-10-17 18:56:26

+0

我編輯了我的回答:格式是** dd/MM/yyyy **不** ** yyyy-MM-dd ** :)它適用於我,測試它並回復我 – 2014-10-17 19:01:35