0

When user select date between from and to date. how to calculate number of days in 3rd Edittext in android? Following my code for datepicker. I have searched so many quotes in stackoverflow but unable to get it. Please add necessary code and resolve it as soon as possible. After adding the code which is mentioned on stackoverflow, my app crashes frequently.

    public class ResourceActivity extends AppCompatActivity {
        EditText date,dateto,days;
        DatePickerDialog datePickerDialog;
        Button save_btn;
        Calendar c1,c2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate (savedInstanceState);
            setContentView (R.layout.resourcedetails);

            date = findViewById (R.id.date);
            dateto = findViewById (R.id.dateto);
            days = findViewById (R.id.dayst);
            save_btn = findViewById (R.id.save_btn);

            save_btn.setOnClickListener (new View.OnClickListener ( ) {
                @Override
                public void onClick(View view) {

                    loadsave();

                }
            });



            date.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // calender class's instance and get current date , month and year from calender
                     c1 = Calendar.getInstance();
                    int mYear = c1.get(Calendar.YEAR); // current year
                    int mMonth = c1.get(Calendar.MONTH); // current month
                    int mDay = c1.get(Calendar.DAY_OF_MONTH); // current day
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(ResourceActivity.this,new DatePickerDialog.OnDateSetListener() {

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

       // set day of month , month and year value in the edit text

                                    String[] MONTHS = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
                                    String mon=MONTHS[monthOfYear];

                                    date.setText(dayOfMonth + "-"
                                            + (mon) + "-" + year);

                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();
                }
            });

            dateto.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // calender class's instance and get current date , month and year from calender
                     c2 = Calendar.getInstance();
                    int mYear = c2.get(Calendar.YEAR); // current year
                    int mMonth = c2.get(Calendar.MONTH); // current month
                    int mDay = c2.get(Calendar.DAY_OF_MONTH); // current day
                    // date picker dialog
                    datePickerDialog = new DatePickerDialog(ResourceActivity.this, new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                                    // set day of month , month and year value in the edit text
                                    String[] MONTHS = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
                                    String mon=MONTHS[monthOfYear];
                                    dateto.setText(dayOfMonth + "-" + (mon) + "-" + year);



                                }
                            }, mYear, mMonth, mDay);
                    datePickerDialog.show();
                }
            });

 try {
            String d1 = date.getText ().toString ();
            String d2 = dateto.getText ().toString ();

            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-mon-yyyy");
            Date date1 = simpleDateFormat.parse(d1);
            Date date2 = simpleDateFormat.parse(d2);
            long difference = Math.abs(date1.getTime() - date2.getTime());

            long difftDays = difference / (24 * 60 * 60 * 1000);

            Log.i("Testing","days" +difftDays);


        }
        catch(Exception ex)
        {

            ex.printStackTrace();
        }


        }
    }
  • suppose you picked dates from each datepicker and has set that value to each textView, then get that text from those textview in a String and parse those values to `Date()` format using `SimpleDateFormat` and then do like this `long diff = date2.getTime() - date1.getTime();` it will give the difference between 2 dates.. – Mohammed Farhan Mar 08 '18 at 04:48
  • you can see [this](https://stackoverflow.com/questions/21285161/android-difference-between-two-dates) – Rumit Patel Mar 08 '18 at 05:04

3 Answers3

0

Use below code:

 long differenceInMillis = date1.getTime() - date2.getTime();
 float noOfDays = (differenceInMillis) / 1000f / 60f / 60f / 24f;
0
public class ResourceActivity extends AppCompatActivity {

    EditText date,dateto,days;
    DatePickerDialog datePickerDialog;
    Button save_btn;
    Calendar c1,c2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);
        setContentView (R.layout.activity_resource);

        date = findViewById (R.id.date);
        dateto = findViewById (R.id.dateto);
        days = findViewById (R.id.days);
        save_btn = findViewById (R.id.save_btn);

        save_btn.setOnClickListener (new View.OnClickListener ( ) {
            @Override
            public void onClick(View view) {

              //  loadsave();
                try {
                    String d1 = date.getText ().toString ();
                    String d2 = dateto.getText ().toString ();

                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
                    Date date1 = simpleDateFormat.parse(d1);
                    Date date2 = simpleDateFormat.parse(d2);
                    long difference = Math.abs(date1.getTime() - date2.getTime());

                    long difftDays = difference / (24 * 60 * 60 * 1000);

                    Log.i("Testing","days" +difftDays);
                    days.setText("days" +difftDays);

                }
                catch(Exception ex)
                {

                    ex.printStackTrace();
                }
            }
        });



        date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // calender class's instance and get current date , month and year from calender
                c1 = Calendar.getInstance();
                int mYear = c1.get(Calendar.YEAR); // current year
                int mMonth = c1.get(Calendar.MONTH); // current month
                int mDay = c1.get(Calendar.DAY_OF_MONTH); // current day
                // date picker dialog
                datePickerDialog = new DatePickerDialog(ResourceActivity.this,new DatePickerDialog.OnDateSetListener() {

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

                        // set day of month , month and year value in the edit text

                        String[] MONTHS = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
                        String mon=MONTHS[monthOfYear];

                        date.setText(dayOfMonth + "-"
                                + (mon) + "-" + year);

                    }
                }, mYear, mMonth, mDay);
                datePickerDialog.show();
            }
        });

        dateto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // calender class's instance and get current date , month and year from calender
                c2 = Calendar.getInstance();
                int mYear = c2.get(Calendar.YEAR); // current year
                int mMonth = c2.get(Calendar.MONTH); // current month
                int mDay = c2.get(Calendar.DAY_OF_MONTH); // current day
                // date picker dialog
                datePickerDialog = new DatePickerDialog(ResourceActivity.this, new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                        // set day of month , month and year value in the edit text
                        String[] MONTHS = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
                        String mon=MONTHS[monthOfYear];
                        dateto.setText(dayOfMonth + "-" + (mon) + "-" + year);



                    }
                }, mYear, mMonth, mDay);
                datePickerDialog.show();
            }
        });




    }
}
Bhagyashri
  • 182
  • 1
  • 15
  • I know this but my question is how to put selected date instead of this String d1 = "12-12-2017"; and String d2 = "14-12-2017"; – Avinash kumar karn Mar 08 '18 at 05:24
  • post your updated code what not worked for you. so that i can help u in that – Bhagyashri Mar 08 '18 at 05:57
  • tell me the date which you are selecting because if you select month January its index is zero form array but your code String mon=MONTHS[monthOfYear]; will give you output as february. And if you choose december as month then it will give exception as arrayIndexoutOfBoundsException because index 12 does not exists.so thats why your code is crashing i guess – Bhagyashri Mar 08 '18 at 06:09
  • I am not getting any error after selecting month december. My selecting date like this 12-February-2018 – Avinash kumar karn Mar 08 '18 at 06:17
  • convert your month in 3 letters i.e FEB so that it can support ofrmat as dd-MMM-yyyy in ui You can show 12-february-2018 .but in background for your calculation purspose keep 12-feb-2018 so that you can achive oupput – Bhagyashri Mar 08 '18 at 06:21
  • you have calculated date difference in on your oncreate before selecting any date so you are not getting any output.so paste your code in dateto.setOnClickListener on save_btn click so you will get output.I have upodated my answer as per you – Bhagyashri Mar 08 '18 at 06:40
0

make one method for day count like below ..

 public String getCountOfDays(String createdDateString, String expireDateString) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());

    Date createdConvertedDate = null, expireCovertedDate = null, todayWithZeroTime = null;
    try {
        createdConvertedDate = dateFormat.parse(createdDateString);
        expireCovertedDate = dateFormat.parse(expireDateString);

        Date today = new Date();

        todayWithZeroTime = dateFormat.parse(dateFormat.format(today));
    } catch (ParseException e) {
        e.printStackTrace();
    }

    int cYear = 0, cMonth = 0, cDay = 0;

    if (createdConvertedDate.after(todayWithZeroTime)) {
        Calendar cCal = Calendar.getInstance();
        cCal.setTime(createdConvertedDate);
        cYear = cCal.get(Calendar.YEAR);
        cMonth = cCal.get(Calendar.MONTH);
        cDay = cCal.get(Calendar.DAY_OF_MONTH);

    } else {
        Calendar cCal = Calendar.getInstance();
        cCal.setTime(todayWithZeroTime);
        cYear = cCal.get(Calendar.YEAR);
        cMonth = cCal.get(Calendar.MONTH);
        cDay = cCal.get(Calendar.DAY_OF_MONTH);
    }


/*Calendar todayCal = Calendar.getInstance();
int todayYear = todayCal.get(Calendar.YEAR);
int today = todayCal.get(Calendar.MONTH);
int todayDay = todayCal.get(Calendar.DAY_OF_MONTH);
*/

    Calendar eCal = Calendar.getInstance();
    eCal.setTime(expireCovertedDate);

    int eYear = eCal.get(Calendar.YEAR);
    int eMonth = eCal.get(Calendar.MONTH);
    int eDay = eCal.get(Calendar.DAY_OF_MONTH);

    Calendar date1 = Calendar.getInstance();
    Calendar date2 = Calendar.getInstance();

    date1.clear();
    date1.set(cYear, cMonth, cDay);
    date2.clear();
    date2.set(eYear, eMonth, eDay);

    long diff = date2.getTimeInMillis() - date1.getTimeInMillis();

    float dayCount = (float) diff / (24 * 60 * 60 * 1000);

    return ("" + (int) dayCount + " Days");
}

and call on save_btn click event like below ...

save_btn.setOnClickListener (new View.OnClickListener ( ) {
            @Override
            public void onClick(View view) {
                days.setText(getCountOfDays(date.getText().toString().trim(),dateto.getText().toString().trim()));
            }
        });