Parimal Debbarma
Parimal Debbarma

Reputation: 23

How do I subtract two date pickers in Android?

I have two date pickers in my app (fromDate and toDate). When the user selects and sets both dates from these two date pickers, I want my app to automatically show the number of days between them in another edit text (days) box.

How can I do it?

Upvotes: 0

Views: 322

Answers (1)

Sushin Pv
Sushin Pv

Reputation: 1894

First add OnDateChangedListener for both of the date pickers as

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    fromDate.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {

        @Override
        public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
            UpdateText();
        }
    });
    toDate.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {

        @Override
        public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
            UpdateText();
        }
    });

Create a function UpdateText to update the EditText days

private void UpdateText() {
    Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());

    localCalendar.set(fromDate.getYear(),  fromDate.getMonth(), fromDate.getDayOfMonth());
    int day1 = localCalendar.get(Calendar.DAY_OF_YEAR);

    localCalendar.set(toDate.getYear(), toDate.getMonth(), toDate.getDayOfMonth());
    int day2 = localCalendar.get(Calendar.DAY_OF_YEAR);

    int day = day2-day1;
    days.setText(""+day);
}

Note: Make sure you are imported the right files

import java.util.Calendar;
import java.util.TimeZone;

Complete program

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.DatePicker;
import android.widget.EditText;

import java.util.Calendar;
import java.util.TimeZone;

public class MainActivity extends AppCompatActivity {
    DatePicker fromDate, toDate;
    EditText days;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fromDate = (DatePicker) findViewById(R.id.datePicker1);
        toDate = (DatePicker) findViewById(R.id.datePicker2);
        days = (EditText)findViewById(R.id.Days);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        fromDate.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {

            @Override
            public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
                UpdateText();
            }
        });
        toDate.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {

            @Override
            public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
                UpdateText();
            }
        });
    }

    private void UpdateText() {
        Calendar localCalendar = Calendar.getInstance(TimeZone.getDefault());

        localCalendar.set(fromDate.getYear(),  fromDate.getMonth(), fromDate.getDayOfMonth());
        int day1 = localCalendar.get(Calendar.DAY_OF_YEAR);

        localCalendar.set(toDate.getYear(), toDate.getMonth(), toDate.getDayOfMonth());
        int day2 = localCalendar.get(Calendar.DAY_OF_YEAR);

        int day = day2-day1;
        days.setText(""+day);
    }
}

Upvotes: 1

Related Questions