【问题标题】:How to calculate number of days between two datepicker in android如何计算android中两个日期选择器之间的天数
【发布时间】:2016-06-14 10:29:43
【问题描述】:

当用户在 from 和 to date 之间选择 date 时。如何在android中calculate第三个Edittext的夜晚数? 按照我的代码datepicker

3 edittext box

1 从日期 2 至今 3 夜数 = ?

 CheckInDate = (EditText) rootView.findViewById(R.id.CheckInDate);

        CheckOutDate = (EditText) rootView.findViewById(R.id.CheckOutDate);





        CheckInDate.setOnClickListener(new View.OnClickListener()

        {
            @Override
            public void onClick(View v) {


                if (v == CheckInDate) {

                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR);
                    int mMonth = c.get(Calendar.MONTH);
                    int mDay = c.get(Calendar.DAY_OF_MONTH);
                    c.set(Calendar.DAY_OF_MONTH, mDay);


                    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.set(Calendar.MONTH, monthOfYear);
                                    cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                                    cal.set(Calendar.YEAR, year);
                                    if(cal.before(c)) {
                                        Toast.makeText(getActivity(), "Select valid date please.", Toast.LENGTH_LONG).show();
                                        return;
                                    }
                                    StringBuilder date = new StringBuilder();
                                    date.delete(0, date.length());
                                    date.append((dayOfMonth<10?"0":"")).append(dayOfMonth)
                                            .append("/").append((monthOfYear + 1) < 10 ? "0" : "")
                                            .append((monthOfYear+1)).append("/").append(year);
                                    CheckInDate.setText(date.toString());
                                }
                            }, mYear, mMonth, mDay);
                    dpd.getDatePicker().setMinDate(c.getTimeInMillis());
                    dpd.show();
                }

            }

        });

        CheckOutDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                if (v == CheckOutDate) {

                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR);
                    int mMonth = c.get(Calendar.MONTH);
                    int mDay = c.get(Calendar.DAY_OF_MONTH);
                    c.set(Calendar.DAY_OF_MONTH, mDay);


                    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.set(Calendar.MONTH, monthOfYear);
                                    cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                                    cal.set(Calendar.YEAR, year);
                                    if(cal.before(c)) {
                                        Toast.makeText(getActivity(), "Select valid date please.", Toast.LENGTH_LONG).show();
                                        return;
                                    }
                                    StringBuilder date = new StringBuilder();
                                    date.delete(0, date.length());
                                    date.append((dayOfMonth<10?"0":"")).append(dayOfMonth)
                                            .append("/").append((monthOfYear + 1) < 10 ? "0" : "")
                                            .append((monthOfYear+1)).append("/").append(year);
                                    CheckOutDate.setText(date.toString());
                                }
                            }, mYear, mMonth, mDay);
                    dpd.getDatePicker().setMinDate(c.getTimeInMillis());
                    dpd.show();                }

            }

        });

【问题讨论】:

标签: android datepicker calendar android-datepicker


【解决方案1】:

试试这个 -

Date checkInTime, checkOutTime;
 private void checkDiff() {
    long duration = checkOutTime.getTime() - checkInTime.getTime();

    long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(duration);
    long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(duration);
    long diffInHours = TimeUnit.MILLISECONDS.toHours(duration);
    //Now Code as per requirement
}


        CheckInDate = (EditText) rootView.findViewById(R.id.CheckInDate);
        CheckOutDate = (EditText) rootView.findViewById(R.id.CheckOutDate);

        CheckInDate.setOnClickListener(new View.OnClickListener()

        {
            @Override
            public void onClick(View v) {


                if (v == CheckInDate) {

                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR);
                    int mMonth = c.get(Calendar.MONTH);
                    int mDay = c.get(Calendar.DAY_OF_MONTH);
                    c.set(Calendar.DAY_OF_MONTH, mDay);

                    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.set(Calendar.MONTH, monthOfYear);
                                    cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                                    cal.set(Calendar.YEAR, year);
                                    if (cal.before(c)) {
                                        Toast.makeText(getActivity(), "Select valid date please.", Toast.LENGTH_LONG).show();
                                        return;
                                    }
                                    checkInTime = cal.getTime();
                                    StringBuilder date = new StringBuilder();
                                    date.delete(0, date.length());
                                    date.append((dayOfMonth < 10 ? "0" : "")).append(dayOfMonth)
                                            .append("/").append((monthOfYear + 1) < 10 ? "0" : "")
                                            .append((monthOfYear + 1)).append("/").append(year);
                                    CheckInDate.setText(date.toString());
                                }
                            }, mYear, mMonth, mDay);
                    dpd.getDatePicker().setMinDate(c.getTimeInMillis());
                    dpd.show();
                }

            }

        });

        CheckOutDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                if (v == CheckOutDate) {

                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR);
                    int mMonth = c.get(Calendar.MONTH);
                    int mDay = c.get(Calendar.DAY_OF_MONTH);
                    c.set(Calendar.DAY_OF_MONTH, mDay);
                    checkOutTime = c.getTime();

                    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.set(Calendar.MONTH, monthOfYear);
                                    cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                                    cal.set(Calendar.YEAR, year);
                                    if (cal.before(c)) {
                                        Toast.makeText(getActivity(), "Select valid date please.", Toast.LENGTH_LONG).show();
                                        return;
                                    }
                                    StringBuilder date = new StringBuilder();
                                    date.delete(0, date.length());
                                    date.append((dayOfMonth < 10 ? "0" : "")).append(dayOfMonth)
                                            .append("/").append((monthOfYear + 1) < 10 ? "0" : "")
                                            .append((monthOfYear + 1)).append("/").append(year);
                                    CheckOutDate.setText(date.toString());
                                    checkOutTime = cal.getTime();
                                    checkDiff();
                                }
                            }, mYear, mMonth, mDay);
                    dpd.getDatePicker().setMinDate(c.getTimeInMillis());
                    dpd.show();
                }

            }

        });
    }

【讨论】:

  • 在您的情况下,在 onDateSet 中对日期进行两次公共刷新(比如说 checkInDate 和 checkOutDate)从日历中获取日期并分配给相应的参考。在第二个(即结帐)的 onDateSet 中,您可以计算两个日期之间的差异。
  • 我是初学者兄弟:(
【解决方案2】:

试试这个代码来获取总天数:

  Calendar cal1 = new GregorianCalendar();
     Calendar cal2 = new GregorianCalendar();

     SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy");

     Date date = sdf.parse("your first date");
     cal1.setTime(date)
     date = sdf.parse("your second date");
     cal2.setTime(date);

 System.out.println("Days= "+daysBetween(cal1.getTime(),cal2.getTime()));

在此处查看您的天数代码:

        CheckOutDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                if (v == CheckOutDate) {

                    final Calendar c = Calendar.getInstance();
                    int mYear = c.get(Calendar.YEAR);
                    int mMonth = c.get(Calendar.MONTH);
                    int mDay = c.get(Calendar.DAY_OF_MONTH);
                    c.set(Calendar.DAY_OF_MONTH, mDay);


                    DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                            new DatePickerDialog.OnDateSetListener() {

                                @Override
                                public void onDateSet(DatePicker view, int year,
                                                      int monthOfYear, int dayOfMonth) {
                                    Calendar cal = Calendar.getInstance();
                                    cal.set(Calendar.MONTH, monthOfYear);
                                    cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                                    cal.set(Calendar.YEAR, year);
                                    if(cal.before(c)) {
                                        Toast.makeText(getActivity(), "Select valid date please.", Toast.LENGTH_LONG).show();
                                        return;
                                    }
                                    StringBuilder date = new StringBuilder();
                                    date.delete(0, date.length());
                                    date.append((dayOfMonth<10?"0":"")).append(dayOfMonth)
                                            .append("/").append((monthOfYear + 1) < 10 ? "0" : "")
                                            .append((monthOfYear+1)).append("/").append(year);
                                    CheckOutDate.setText(date.toString());




                                    /************* Check you days HERE ***************/
                                 try {

                                    Calendar calCheckIn =  new GregorianCalendar();
\                                    Calendar calCheckOut = new GregorianCalendar();

                                     SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");


                                    Date dateCheckIn = sdf.parse(CheckInDate.getText().toString());
                                    calCheckIn.setTime(dateCheckIn);
                                    Date dateCheckOut = sdf.parse(CheckOutDate.getText().toString());
                                    calCheckOut.setTime(dateCheckOut);

                                    System.out.println("Days= "+daysBetween(dateCheckIn.getTime(),dateCheckOut.getTime()));

                                     EditText Night = (EditText) rootView.findViewById(R.id.Noofnights); 
                                       Night.setText(daysBetween(dateCheckIn.getTime(),dateCheckOut.getTime()) + "");
                                    } catch (Exception e) {
                                    e.printStackTrace();
                                  }
/***************************************/


                                }
                            }, mYear, mMonth, mDay);
                    dpd.getDatePicker().setMinDate(c.getTimeInMillis());
                    dpd.show();                }

            }

        });

将此方法放在类中的任何位置:

 public int daysBetween(Date d1, Date d2){
             return (int)( (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24));
     }

【讨论】:

  • 你想在哪个edittext中设置夜数?把代码放在这里
  • 夜晚 = (EditText) rootView.findViewById(R.id.Noofnights);
  • 选择 checkOutDate 后?
  • 当我选择 CheckInDate 14-06-2016 和 CheckOutDate 16-06-2016 Number Of Night = 2 :) 我想要这个
  • 当您选择 checkOutDate 时使用此代码,它将计算 b/w checkIn & checkOut 的天数
猜你喜欢
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2010-10-07
  • 2020-10-25
相关资源
最近更新 更多