2016-11-22 97 views
0

我正在创建一个应用程序,其中我显示了日期选取器和时间选取器与验证。我验证了时间选取器,因为我将当前时间与选定时间进行比较并设置消息“选择正确时间”它选择当前日期时正确工作,但当我选择另一个日期时,它也显示“选择正确的时间”。我想以这种方式使它当我选择另一个日期我应该允许我选择任何时间。我知道我必须根据日期选择进行设置,但我不知道如何设置。根据日期选择验证在选中日期

Calender c = Calendar.getInstance(); 
    year = c.get(Calendar.YEAR); 
    month = c.get(Calendar.MONTH); 
    day = c.get(Calendar.DAY_OF_MONTH); 
    hourofday = c.get(Calendar.HOUR_OF_DAY); 
    minuteofday = c.get(Calendar.MINUTE); 
    totalCurrenttime = hourofday + minuteofday; 



private void showDateDailog() { 

    final DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) { 

      year = selectedYear; 
      month = selectedMonth; 
      day = selectedDate; 


       ((TextView) findViewById(R.id.textViewTORStartDate)).setText(new StringBuilder().append(day).append("/") 
         .append(month + 1).append("/").append(year)) 
     } 
    }, year, month, day); 
    datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
    datePickerDialog.show(); 
} 

private void showTimeDailog() { 
    TimePickerDialog timePickerDialog = new TimePickerDialog(mContext, new TimePickerDialog.OnTimeSetListener() { 
     @Override 
     public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) { 

      hour = selectedHour; 
      minute = selectedMinute; 
      int selectedTime = hour + minute; 

       if (validTime(totalCurrenttime, selectedTime)) { 
        ((TextView) findViewById(R.id.textViewTORStartTime)).setText(selectedHour + ":" + selectedMinute); 
       } else { 
        Toast.makeText(getApplicationContext(), R.string.txt_select_correct_time, Toast.LENGTH_SHORT).show(); 
        ((TextView) findViewById(R.id.textViewTORStartTime)).setText(R.string.txt_Start_Time); 
       }     
     } 
    }, hour, minute, timeview); 
    timePickerDialog.show(); 
} 


public boolean validTime(long current, long selected) { 

    boolean isValid = false; 
    if (selected > current) { 
     isValid = true; 
    } 
    return isValid; 
} 

回答

0

在你validTime方法,你也必须经过它是由DatePicker控件设置日期,并将其与now比较。如果是未来日期,则返回true,而不进行比较时间。

例如

public boolean validTime(long current, long selected, long dateSet) { 

    if (dateSet > System.currentTimeMillis()) { 
     return true; 
    } else { 
     boolean isValid = false; 
     if (selected > current) { 
      isValid = true; 
     } 
     return isValid; 
    } 
} 

而在你onTimeSet方法:

public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) { 

    hour = selectedHour; 
    minute = selectedMinute; 
    int selectedTime = hour + minute; 

    Calendar cal = Calendar.getInstance(); 
    cal.set(year, month, day); 

    if (validTime(totalCurrenttime, selectedTime, cal.getTimeInMillis())) { 
     ((TextView) findViewById(R.id.textViewTORStartTime)).setText(selectedHour + ":" + selectedMinute); 
    } else { 
     Toast.makeText(getApplicationContext(), R.string.txt_select_correct_time, Toast.LENGTH_SHORT).show(); 
     ((TextView) findViewById(R.id.textViewTORStartTime)).setText(R.string.txt_Start_Time); 
    } 
} 
0

我同意@pleft,与您的验证问题是由于你比较不采取日期考虑。编写涉及的软件时间是一件非常困难的事情,所以要利用库来简化这个过程。如果你使用java类,你可以用更简单的方式得到你想要的结果。

从代码看来,您似乎希望让用户选择在现在为之后的日期和时间。 Calendar类可以提供帮助。

// initializing the date to the current time 
private Calendar date = Calendar.getInstance(); 

// creating a date formatter to output the dateTime in the desired format 
private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 

private void showDateDialog() { 
    Calendar c = GregorianCalendar.getInstance(); 
    final DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, dateSetListener,c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE)); 
    datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
    datePickerDialog.show(); 
} 

// pulling out the listener for clarity 
private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) { 
     date = new GregorianCalendar(selectedYear, selectedMonth, selectedDate); 
     String dateString = sdf.format(date.getTime()); 
     ((TextView) findViewById(R.id.textViewTORStartDate)).setText(dateString); 
    } 
}; 

private void showTimeDialog() { 
    Calendar c = Calendar.getInstance(); 
    TimePickerDialog timePickerDialog = new TimePickerDialog(mContext, timeSetListener, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), timeView); 
    timePickerDialog.show(); 
} 

// pulling out the listener for clarity 
private TimePickerDialog.OnTimeSetListener timeSetListener =new TimePickerDialog.OnTimeSetListener() { 

    @Override 
    public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) { 
     // creating a clone of the existing date 
     Calendar newCal = Calendar.class.cast(date.clone()); 
     // setting the hour & minute of the new calendar 
     newCal.set(Calendar.HOUR_OF_DAY, selectedHour); 
     newCal.set(Calendar.MINUTE, selectedMinute); 

     if (validTime(Calendar.getInstance(), newCal)) { 
      ((TextView) findViewById(R.id.textViewTORStartTime)).setText(selectedHour + ":" + selectedMinute); 
     } else { 
      Toast.makeText(getApplicationContext(), R.string.txt_select_correct_time, Toast.LENGTH_SHORT).show(); 
      ((TextView) findViewById(R.id.textViewTORStartTime)).setText(R.string.txt_Start_Time); 
     } 
    } 
}; 

public boolean validTime(Calendar current, Calendar selected) { 
    return 0 < selected.compareTo(current); 
} 

从这个主要的外卖是利用该java.util.Calendar类给你的权力的。我强烈建议看看Calendar docotutorials。另外,请记住,格式化自己的日期/时间是可以避免的。如果你坚持使用普通的java库,SimpleDateFormat是你的朋友。 link

祝你好运!