根据日期选择验证时间戳

时间:2016-11-22 14:33:43

标签: android

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

    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;
}

2 个答案:

答案 0 :(得分:1)

我同意@pleft认为您的验证问题是由于您的比较未考虑日期。编写涉及时间的软件是一件非常困难的事情,因此请使用库来简化流程。如果您使用java类,您可以以更简单的方式获得您正在寻找的结果。

从代码中可以看出,您希望用户选择 now 之后的日期和时间。 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

祝你好运!

答案 1 :(得分:0)

validTime方法中,您还必须传递DatePicker控件设置的日期,并将其与now进行比较。如果是未来日期,则返回true而不进行比较时间。

e.g。

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);
    }
}