как рассчитать количество дней между двумя датами, введенными пользователем через средство выбора даты в студии Android

Я работаю над приложением, в котором у меня есть два средства выбора даты. Как я могу рассчитать количество дней между датами, выбранными этими сборщиками дат? Есть ли для этого библиотека или встроенная функция?

Ниже мой код:

public class ApplyLeave extends AppCompatActivity {

    private static final String tag = "ApplyLeave";
    private TextView fomDate;
    private TextView ToDate, days_count;
    private EditText reason;
    private Button save_btn, apply_btn, select_recepeints;
    private TextView leave_type;
    private DatePickerDialog.OnDateSetListener fromdatelistener;
    private DatePickerDialog.OnDateSetListener todatelistener;
    String date1, date2;

    int day1, day2;
    Spinner spinner;
    ArrayAdapter<CharSequence> adapter;
    ListView lv;

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_apply_leave);
        reason=(EditText)findViewById(R.id.reason);
        fomDate=(TextView)findViewById(R.id.from_date);
        days_count=(TextView)findViewById(R.id.Days_count);
        ToDate=(TextView)findViewById(R.id.to_date);
        leave_type=(TextView)findViewById(R.id.leave_type);
        save_btn=(Button)findViewById(R.id.save_button);
        apply_btn=(Button)findViewById(R.id.apply_button);
        select_recepeints=(Button)findViewById(R.id.edit_rec);
        lv = (ListView)findViewById(R.id.result);

        final FragmentManager fm=getFragmentManager();
        final  edit_recepients er=new edit_recepients();

        select_recepeints.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                er.show(fm,"TV_tag");

            }
        });
            SharedPreferences sharedPreferences =getSharedPreferences("MyData",MODE_PRIVATE);
             String leave_typ= sharedPreferences.getString("leave_type","null");
        String formdate= sharedPreferences.getString("fromDate","null");
        String toDate= sharedPreferences.getString("ToDate","null");
        String reson= sharedPreferences.getString("reason","null");
    String recepienst= sharedPreferences.getString("recepients","null");
        if(leave_typ.equals("null") || formdate.equals("null") || toDate.equals("null") || reson.equals("null"))
        {
            Toast.makeText(getApplicationContext(), "not data found",Toast.LENGTH_SHORT).show();

        }
        else {

            leave_type.setText(leave_typ);
            fomDate.setText(formdate);
            ToDate.setText(toDate);
            reason.setText(reson);

        }

          save_btn.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  SharedPreferences sharedPreferences=getApplicationContext().getSharedPreferences("MyData",MODE_PRIVATE);
                 SharedPreferences.Editor editor=sharedPreferences.edit();
                  editor.putString("leave_type",leave_type.getText().toString());
                  editor.putString("fromDate",fomDate.getText().toString());
                  editor.putString("ToDate",ToDate.getText().toString());

                  editor.putString("reason",reason.getText().toString());
                  editor.putString("recepients",lv.getAdapter().toString());

                  editor.commit();
                  Toast.makeText(getApplicationContext(),"Application saved",Toast.LENGTH_SHORT).show();

              }
          });

        //spinner for leave
        spinner=(Spinner)findViewById(R.id.leaves);
        adapter=ArrayAdapter.createFromResource(this,R.array.leave_type,R.layout.spinner_layout);
        adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        //get data from dashboard activity and set into spineer
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if(getIntent().getExtras()!=null) {
                    int select = getIntent().getExtras().getInt("leave");
                    spinner.setSelection(select);
                }

            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

            //listview to display selected persons on Apply leave Acitivity from the onclick event on setttings activiy.
        if(getIntent().getExtras()!=null) {
            Bundle b = getIntent().getExtras();
            String[] resultArr = b.getStringArray("selectedItems");

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    R.layout.spinner_layout, resultArr);
            lv.setAdapter(adapter);
        }

        //

        //  Back button in toolbar
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitleTextColor(getResources().getColor(R.color.o2htextOne));
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        final Drawable upArrow = getResources().getDrawable(R.drawable.back_arrow);
        upArrow.setColorFilter(getResources().getColor(R.color.o2htextOne), PorterDuff.Mode.SRC_ATOP);
        getSupportActionBar().setHomeAsUpIndicator(upArrow);
        if(getSupportActionBar()!=null)
        {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        }//

       fomDate.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
                Calendar calendar= Calendar.getInstance();
                int year=calendar.get(Calendar.YEAR);
                int month=calendar.get(Calendar.MONTH);
                int day=calendar.get(Calendar.DAY_OF_MONTH);
                day1=calendar.get(Calendar.DAY_OF_YEAR);

                DatePickerDialog datePickerDialog=new DatePickerDialog(ApplyLeave.this,
                        R.style.DatePickerDialogTheme,
                        fromdatelistener,year,month,day);

                datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
                datePickerDialog.show();
            }
        });

        fromdatelistener= new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                month=month+1;
                                 Log.d("tag","setDate: "+year+ "/"+month+"/"+dayOfMonth+"");
               date1 =+year+ "/"+month+"/"+dayOfMonth+"";
                fomDate.setText(date1);

            }
        };

        ToDate.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
                Calendar calendar= Calendar.getInstance();
                int year=calendar.get(Calendar.YEAR);
                int month=calendar.get(Calendar.MONTH);
                int day=calendar.get(Calendar.DAY_OF_MONTH);
                 day2=calendar.get(Calendar.DAY_OF_YEAR);

                DatePickerDialog datePickerDialog=new DatePickerDialog(ApplyLeave.this,
                      R.style.DatePickerDialogTheme,
                        todatelistener,year,month,day);

                datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
                datePickerDialog.show();


            }
        });

        todatelistener= new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                month=month+1;
                Log.d("tag","setDate: "+year+ "/"+month+"/"+dayOfMonth+"");

               date2 =+year+ "/"+month+"/"+dayOfMonth+"";
                ToDate.setText(date2);

            }
        };
    }

    @Override
    public void onBackPressed() {
         Intent intent = new Intent(getApplicationContext(), Main3Activity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         startActivity(intent);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId()==android.R.id.home)
        {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}

person Akshay    schedule 11.07.2017    source источник


Ответы (5)


Чтобы сначала получить разницу дат в днях, вам нужно вычесть date_to с date_from следующим образом:

long difference = Math.abs(date_to.getTime() - date_from.getTime());  

Затем вы можете получить разницу в днях с приведенной ниже формулой -

int days = (int) (difference / (1000 * 60 * 60 * 24)); 
person Rahul    schedule 11.07.2017

Что вы можете просто сделать, так это:

Возьмите 2 свидания, как это -

Date date1,date2;
//Difference in milliseconds:
long difference = date2.getTime()-date1.getTime();

Затем вы можете просто преобразовать миллисекунды в часы, секунды и даты.

Надеюсь это поможет.

person Abdul Waheed    schedule 11.07.2017

Найти решение

  1. Если ваши даты в строковом формате

            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar c= Calendar.getInstance();
            Date c= df.parse("YourStartDate");
            String startDte = df.format(c.getTime());
            Date startTime = df.parse(startDte);
            c.setTime(startTime);
            long startDateinMillis  = c.getTime();
    
            Date c= df.parse("YourEndDate");
            String endDt= df.format(c.getTime());
            Date endTime= df.parse(endDt);
            c.setTime(endTime);
            long endDateInMillis = c.getTime();
    
            long different = endDateInMillis  - startDateinMillis;
            long daysInMilli = hoursInMilli * 24;
    
            long elapsedDays = different / daysInMilli;
            System.out.printf("%d days, elapsedDays);
    
  2. Если ваши даты в формате Date:

           long different = endDate.getTimeInMillis() - startDate.getTimeInMillis();
            long daysInMilli = hoursInMilli * 24;
    
            long elapsedDays = different / daysInMilli;
            System.out.printf("%d days, elapsedDays);
    
person Rajasekhar    schedule 11.07.2017

попробуйте это, используя getUnitBetweenDates, вы можете рассчитать дни между датами

    SimpleDateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date d = null;
    java.util.Date d1 = null;
    try {
        d = dfDate.parse(2017-08-15);
        d1 = dfDate.parse(2017-08-27);
    } catch (java.text.ParseException e) {
        e.printStackTrace();
    }

    long days = getUnitBetweenDates(d, d1, TimeUnit.DAYS);

    Log.e("Days:-> ", days + "");
person AskNilesh    schedule 11.07.2017

Вот как вы вычисляете разницу между двумя датами в днях:

PS: fromDate и toDate являются экземплярами класса Date.

long diffInMillies = fromDate.getTime() - toDate.getTime();

int diffInDays = (int) TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);

Вот пример класса, использующего приведенный выше фрагмент кода:

public class TestClass extends AppCompatActivity {

private DatePickerDialog.OnDateSetListener fromDateListener;
private DatePickerDialog.OnDateSetListener toDateListener;
private TextView fromDateView, toDateView;
private Date fromDate, toDate;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_class);

    fromDateView = (TextView) findViewById(R.id.fromDateView);
    toDateView = (TextView) findViewById(R.id.toDateView);
    Button button = (Button) findViewById(R.id.button);

    final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd", Locale.US);

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

            Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(
                    TestClass.this,
                    R.style.DatePickerDialogTheme,
                    fromDateListener, year, month, day);

            dialog.show();
        }
    });

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

            Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(
                    TestClass.this,
                    R.style.DatePickerDialogTheme,
                    toDateListener, year, month, day);

            dialog.show();
        }
    });

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

            if (fromDate == null || toDate == null) return;

            long diffInMillies = fromDate.getTime() - toDate.getTime();

            int diffInDays = (int) TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);

            Log.d("Difference in days", String.valueOf(diffInDays));
        }
    });

    fromDateListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            fromDate = calendar.getTime();

            fromDateView.setText(dateFormat.format(fromDate));
        }
    };

    toDateListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month);
            calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            toDate = calendar.getTime();

            toDateView.setText(dateFormat.format(toDate));
        }
    };
}
}
person Community    schedule 11.07.2017