5

我是一个应用程序,其中用户必须选择两个日期,即从日期到日期。这两个字段都不应接受小于当前日期的任何日期。我已经浏览了本网站上的一些帖子,并通过使用单个日期选择器对话框实现了此功能和单个 ondatesetListener。

我的问题是我无法验证迄今为止应始终大于或等于起始日期的条件。请帮助我。我无法捕获起始日期,因为活动日期被活动结束日期覆盖了谢谢Advance.Following 是代码:

public class Leave_form extends Activity 
{       
    private static EditText tvDislpayResult;
    private Button startPickDate;
    private Button endPickDate;
    private Calendar startDate;
    private Calendar endDate;
    //private EditText startDateDisplay;
    //private EditText endDateDisplay;
    static final int DATE_DIALOG_ID = 0;
    private TextView startDateDisplay;
    private TextView endDateDisplay;
    private TextView activeDateDisplay;
    private Calendar activeDate;
    private Calendar currentDate;
    private Calendar fromDate;

    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leave_form);

        /*  capture our View elements for the start date function   */
        startDateDisplay = (EditText) findViewById(R.id.e_from_date);
        startPickDate = (Button) findViewById(R.id.Set_date1);

        /*get tday date  */   

        currentDate=Calendar.getInstance();
        Log.d("currentDate ",""+(currentDate.get(Calendar.DAY_OF_MONTH))+(currentDate.get(Calendar.MONTH)+1)+(currentDate.get(Calendar.YEAR)));

        /* get the current date */
        startDate = Calendar.getInstance();
        Log.d("startdate ",""+(startDate.get(Calendar.DAY_OF_MONTH))+(startDate.get(Calendar.MONTH)+1)+(startDate.get(Calendar.YEAR)));

        /* add a click listener to the button   */
        startPickDate.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v) 
            {
                showDateDialog(startDateDisplay, startDate);
                Log.d("startDate-on click ",""+(startDate.get(Calendar.DAY_OF_MONTH))+(startDate.get(Calendar.MONTH)+1)+(startDate.get(Calendar.YEAR)));

            }
        });

        /* capture our View elements for the end date function */
        endDateDisplay = (EditText) findViewById(R.id.e_to_date);
        endPickDate = (Button) findViewById(R.id.Set_date2);

        /* get the current date */
        endDate = Calendar.getInstance();
        Log.d("endDate ",""+(endDate.get(Calendar.DAY_OF_MONTH))+(endDate.get(Calendar.MONTH)+1)+(endDate.get(Calendar.YEAR)));

        /* add a click listener to the button   */
        endPickDate.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                showDateDialog(endDateDisplay, endDate);
                Log.d("endDate -on click",""+(endDate.get(Calendar.DAY_OF_MONTH))+(endDate.get(Calendar.MONTH)+1)+(endDate.get(Calendar.YEAR)));
            }
        });

        /* display the current date (this method is below)  */
       // updateDisplay(startDateDisplay, startDate);
       // updateDisplay(endDateDisplay, endDate);
    }

    private void updateDisplay(TextView dateDisplay, Calendar date) 
    {
        dateDisplay.setText(
                new StringBuilder()
                    // Month is 0 based so add 1
                    .append(date.get(Calendar.DAY_OF_MONTH) ).append("-")
                    .append(date.get(Calendar.MONTH)+1).append("-")
                    .append(date.get(Calendar.YEAR)).append(" "));

        Log.d("msg","date:"+(date.get(Calendar.DAY_OF_MONTH))+(date.get(Calendar.MONTH)+1)+(date.get(Calendar.YEAR)));

        fromDate=date;
    }

    public void showDateDialog(TextView dateDisplay, Calendar date)
    {
        Log.d("SDD", dateDisplay.getText().toString());
        Log.d("startdate ",""+(currentDate.get(Calendar.DAY_OF_MONTH))+(currentDate.get(Calendar.MONTH)+1)+(currentDate.get(Calendar.YEAR)));
       activeDateDisplay = dateDisplay;
        activeDate = date;
        showDialog(DATE_DIALOG_ID);
    }

    private OnDateSetListener dateSetListener = new OnDateSetListener()
    {
        @SuppressWarnings("deprecation")
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            activeDate.set(Calendar.YEAR, year);
            activeDate.set(Calendar.MONTH, monthOfYear);
            activeDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            Log.d("activeDate-on dateset ",""+(activeDate.get(Calendar.DAY_OF_MONTH))+(activeDate.get(Calendar.MONTH)+1)+(activeDate.get(Calendar.YEAR)));

            if(currentDate.after(activeDate)|(currentDate.equals(activeDate)))
            {
                Toast toast=Toast.makeText(Leave_form.this, "Please select a valid date", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();


            }
            else
            {
                if((currentDate.after(activeDate)|(currentDate.equals(activeDate)))&&(startDateDisplay.getText().toString()!=null))
                {
                    Log.d("startDate-on click ",""+(startDate.get(Calendar.DAY_OF_MONTH))+(startDate.get(Calendar.MONTH)+1)+(startDate.get(Calendar.YEAR)));
                    if(startDate.before(activeDate))
                    {
                        updateDisplay(activeDateDisplay, activeDate);
                    }

                    else
                    {
                        Toast.makeText(getApplicationContext(), "enter valid date", Toast.LENGTH_SHORT).show();
                        /*AlertDialog alertDialog=new AlertDialog.Builder(Leave_form.this).create();

                        alertDialog.setMessage("Choose a valid date");

                        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub

                            }
                        });
                        alertDialog.show();*/
                    }
                }
                else
                {
                    updateDisplay(activeDateDisplay, activeDate);
                }

           }

            unregisterDateDisplay();
        }
    };

    private void unregisterDateDisplay() 
    {
        Log.d("startdate ",""+(currentDate.get(Calendar.DAY_OF_MONTH))+(currentDate.get(Calendar.MONTH)+1)+(currentDate.get(Calendar.YEAR)));
        Log.d("from date:","-"+activeDate.DAY_OF_MONTH+activeDate.MONTH+activeDate.YEAR);
        activeDateDisplay = null;
        activeDate = null;
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {

            case DATE_DIALOG_ID:
                Log.d("fromdate","msg");
                Log.d("id",""+DATE_DIALOG_ID);
                return new DatePickerDialog(this, dateSetListener, activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
        }
        return null;
    }

    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        super.onPrepareDialog(id, dialog);
        switch (id) {
            case DATE_DIALOG_ID:
                Log.d("id",""+DATE_DIALOG_ID);
                ((DatePickerDialog) dialog).updateDate(activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
                break;
        }
    }

    public void leave(View view)
    {
        Intent intent1=new Intent(this,Rough.class);
        setContentView(R.layout.activity_rough);
        startActivity(intent1);
    }
    public void logout(View view)
    {
        Intent intent2=new Intent (this,MainActivity.class);
        setContentView(R.layout.activity_main);
        startActivity(intent2);
    }
}
4

4 回答 4

3

最好更改此类代码:

if((currentDate.after(activeDate)|(currentDate.equals(activeDate)))&&(startDateDisplay.getText().toString()!=null))

多个 if 块,如:

if((currentDate.after(activeDate)||(currentDate.equals(activeDate))
    if(!startDateDisplay.getText().toString().equals(null))

仔细注意差异!

也看看这个答案here

于 2013-04-05T13:21:28.517 回答
2

解决了..

感谢@Amit 的回答。我的问题得到了解决,它就像一个魅力。我只更改了 OnDateSetListener 段中的代码。以下是代码:

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


        activeDate.set(Calendar.YEAR, year);
        activeDate.set(Calendar.MONTH, monthOfYear);
        activeDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);



        Date fromDate,toDate;
        try
            {


                //checks if the date chosen by the user is greater than the current system date.Doesnt allow to choose past date
                if(currentDate.before(activeDate)||currentDate.equals(activeDate))
                {

                    //checks if the from date edit text is empty or not
                    if(startDateDisplay.getText().toString().isEmpty())
                    {

                        updateDisplay(activeDateDisplay, activeDate);

                    }
                    else
                    {


                        //converts the date in the from date edittextbox and active date to dd-mm-yyyy format
                        SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");

                        fromDate=sdf.parse(startDateDisplay.getText().toString());
                        Log.d("fromdate",""+fromDate);

                        String temp=(activeDate.get(Calendar.DAY_OF_MONTH))+"-"+(activeDate.get(Calendar.MONTH)+1)+"-"+(activeDate.get(Calendar.YEAR));
                        toDate=sdf.parse(temp);
                        Log.d("todate",""+toDate);


                        //checks if todate is greater or equal to from date 
                        if ((toDate.after(fromDate))||(toDate.equals(fromDate)))
                        {
                            updateDisplay(activeDateDisplay, activeDate);

                        }
                        else
                        {
                            Toast toast=new Toast(getBaseContext());
                            toast=Toast.makeText(Leave_form.this, "To date should be greater than From date", Toast.LENGTH_SHORT);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                        }
                    }
                }

                else
                {
                    Toast toast=new Toast(getBaseContext());
                    toast=Toast.makeText(Leave_form.this, "Please enter a valid date", Toast.LENGTH_LONG);
                    toast.setGravity(Gravity.CENTER, 0, 0);
                    toast.show();
                }
            }
        catch(Exception e)
        {
            Log.e("excepion",e.getMessage().toString());
        }
        unregisterDateDisplay();
    }
};

谢谢大家的回答。:)

于 2013-04-09T08:51:34.993 回答
0
package com.example.pickerdate;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    private TextView mDateDisplay;
    private int mYear;
    private int year1;
    private int mMonth;
    private int mDay;
    private int month;
    private int day;
    static final int DATE_DIALOG_ID = 1;
    Button pickDate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
        pickDate = (Button) findViewById(R.id.pickDate);
        pickDate.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                System.out.println("hello3");
                showDialog(DATE_DIALOG_ID);

            }
        });

        System.out.println("hello1");
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);
        updateDisplay();
        year1 = mYear;
        month = mMonth;
        day = mDay;
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        DatePickerDialog _date = null;
        switch (id) {

        case DATE_DIALOG_ID:
            _date = new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
                    mDay) {
                @Override
                public void onDateChanged(DatePicker view, int year,
                        int monthOfYear, int dayOfMonth) {
                    System.out.println("----------onDateChanged()-----------"
                            + mYear + "--" + year);
                    System.out.println("----------onDateChanged()-----------"
                            + mMonth + "--" + monthOfYear);
                    System.out.println("----------onDateChanged()-----------"
                            + mDay + "--" + dayOfMonth);

                    /*
                     * These lines of commented code used for only setting the
                     * maximum date on Date Picker..
                     * 
                     * if (year > mYear && year) view.updateDate(mYear, mMonth,
                     * mDay);
                     * 
                     * if (monthOfYear > mMonth && year == mYear )
                     * view.updateDate(mYear, mMonth, mDay);
                     * 
                     * if (dayOfMonth > mDay && year == mYear && monthOfYear ==
                     * mMonth) view.updateDate(mYear, mMonth, mDay);
                     */

                    // these below lines of code used for setting the maximum as
                    // well as minimum dates on Date Picker Dialog..

                    if ((mYear > year)
                            || ((mMonth > monthOfYear) && (mYear == year))
                            || ((mDay > dayOfMonth) && (mYear == year) && (mMonth == monthOfYear))) {
                        view.updateDate(year1, month, day);

                    }

                }
            };

        }
        System.out.println("hello5");
        return _date;
    }

    protected void onPrepareDialog(int id, Dialog dialog) {
        switch (id) {

        case DATE_DIALOG_ID:
            System.out.println("hello6");

            ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);
            break;
        }
    }

    private void updateDisplay() {
        System.out.println("hello2");
        mDateDisplay.setText(new StringBuilder()
                // Month is 0 based so add 1
                .append(mMonth + 1).append("-").append(mDay).append("-")
                .append(mYear).append(" "));
    }

    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            System.out.println("hello7");

            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            System.out.println("year=" + year);
            System.out.println("month=" + monthOfYear);
            System.out.println("day=" + dayOfMonth);
            updateDisplay();
        }
    };
}
于 2013-07-26T05:50:25.320 回答
0

在这里,我展示了一种简单的技术,可以将用户输入的字符串转换为 Date根据我们的逻辑进行比较

public class Main {

    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();

        Date selectedDate = null;
        Date currentDate = null;


        //Formatter to format the date given by system
        SimpleDateFormat requiredFormant =  new SimpleDateFormat("yyyy-MM-dd");


        //To get current Date
        try {
            currentDate = requiredFormant.parse(requiredFormant.format(calendar.getTime()));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        // user inputted Text ,it can be from EditText Etc
        try {
             selectedDate = requiredFormant.parse("2019-01-09");
        } catch (ParseException e) {
            e.printStackTrace();
        }

        //Logic to compare dates
        if (currentDate.equals(selectedDate))
            System.out.println("You born today ?");
        else if(currentDate.after(selectedDate))
            System.out.println("Good to proceed");
        else
            System.out.println("Not Possible");


    }

}
于 2019-01-07T07:47:39.490 回答