2015-02-09 60 views
0

我有一个使用DatePickerFragment的日期选择器。在onDateSet事件中,我使用下面的代码。Android date.before不起作用

DatePickerDialog.OnDateSetListener ondate = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, 
          int dayOfMonth) { 

     Calendar selected = Calendar.getInstance(); 
     selected.set(year, monthOfYear, dayOfMonth); 

     Calendar now = Calendar.getInstance(); 
     now.set(now.get(Calendar.YEAR),now.get(Calendar.MONTH),now.get(Calendar.DAY_OF_MONTH)); 

     if (selected.after(now) || selected.equals(now)) 
     { 
      EditText dateField = (EditText) getActivity().findViewById(Integer.valueOf(textFieldId)); 
      dateField.setText(new StringBuilder().append(dayOfMonth) 
        .append("-").append(monthOfYear + 1).append("-").append(year) 
        .append(" ")); 
     } 

     else 
     { 
      Toast.makeText(getActivity(), "this is my Toast message!!! =)", 
        Toast.LENGTH_SHORT).show(); 
     } 


    } 

}; 

此代码不起作用,如果我选择今天的日期,它仍然会生成一个toast消息,而不是将选定的值加载到文本字段中。

不知道我在做什么错。

+1

'now.set'是不必要的 – waqaslam 2015-02-09 12:16:39

+0

您是否考虑过两个日期的时间部分如何影响比较? – GreyBeardedGeek 2015-02-09 12:25:10

+0

嗨GreyBeardedGeek,我认为这是问题所在,这就是为什么我设置日期只使用年,月和日,我想我做了不正确的? – user2029541 2015-02-09 13:33:12

回答

0

你的问题是,当你选择日期和当你得到“现在”日期的时刻发生几秒钟,所以他们都有一些不同的时间,现在比选定的时间晚。

你可以做的是只比较请将dayOfMonth,月,年的字段:

Calendar selected = Calendar.getInstance(); 
    selected.set(year, monthOfYear, dayOfMonth); 

    Calendar now = Calendar.getInstance(); 


    if(now.get(Calendar.YEAR)== year && now.get(Calendar.MONTH) == month && now.get(Calendar.DAY_OF_MONTH)== day) 
    // they are the same date 

或者你可以将两个使用简单的日期格式“年月日”的字符串和作为比较这两个一串

0

好的感谢GreyBeardedGeek我被放在正确的轨道上,这是我的代码有效。

//Set static Date for use in this fragment 
Calendar todaysDate = Calendar.getInstance(); 
final int Year = todaysDate.get(Calendar.YEAR); 
final int Month = todaysDate.get(Calendar.MONTH); 
final int DayOfMonth = todaysDate.get(Calendar.DAY_OF_MONTH); 

/***************** PICKER DIALOGS *****************************/ 
//DatePicker Dialog 
private void showDatePicker(final int fieldId) { 
    textFieldId = fieldId; 
    DatePickerFragment date = new DatePickerFragment(); 
    /** 
    * Set Up Current Date Into dialog 
    */ 
    Calendar calender = Calendar.getInstance(); 
    Bundle args = new Bundle(); 
    args.putInt("year", Year); 
    args.putInt("month", Month); 
    args.putInt("day", DayOfMonth); 
    date.setArguments(args); 
    /** 
    * Set Call back to capture selected date 
    */ 
    // date.setMinimumDate(calender.get(Calendar.DAY_OF_MONTH),calender.get(Calendar.MONTH),calender.get(Calendar.YEAR)); 
    date.setCallBack(ondate); 
    date.show(getFragmentManager(), "Date Picker"); 

} 


DatePickerDialog.OnDateSetListener ondate = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, 
          int dayOfMonth) { 

     //Calendar selected = Calendar.DATE; 
     Date selected =new Date(year, monthOfYear, dayOfMonth); 

     Date today = new Date(Year,Month,DayOfMonth); 

     if (selected.after(today) || selected.equals(today))// (now.get(Calendar.YEAR)== year && now.get(Calendar.MONTH) == monthOfYear && now.get(Calendar.DAY_OF_MONTH)== dayOfMonth)) 
     { 
      EditText dateField = (EditText) getActivity().findViewById(Integer.valueOf(textFieldId)); 
      dateField.setText(new StringBuilder().append(dayOfMonth) 
        .append("-").append(monthOfYear + 1).append("-").append(year) 
        .append(" ")); 
     } 

     else 
     { 
      Toast.makeText(getActivity(), "this is my Toast message!!! =)", 
        Toast.LENGTH_SHORT).show(); 
     } 


    } 

};