Как решить эту проблему в диалоговом окне datepicker в android?

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

Пожалуйста, помогите мне. Я нахожу разницу между двумя датами, и все в порядке, если дата начала и дата окончания указаны в том же месяце .. но если я выбрал сегодняшнюю дату в качестве даты начала и 1 февраля в качестве даты окончания. Он показывает разницу как 1 (один).

Я просто спрашивал о том, что пошло не так, в моем собственном коде, являющемся новичком в android. Поэтому я не могу понять, почему этот вопрос закрыт.

public void showStartDate(View v) {
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "startDate");

    }

    public void showEndDate(View v){
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.show(getFragmentManager(), "endDate");
    }
    public class DatePickerFragment extends DialogFragment
    implements DatePickerDialog.OnDateSetListener /*,OnDateChangedListener*/{

        @Override 
   public Dialog onCreateDialog(Bundle savedInstanceState) {
 //Use the current date as the default date in the picker
     final Calendar c = Calendar.getInstance();
     int year = c.get(Calendar.YEAR);
     int month = c.get(Calendar.MONTH);
     int day = c.get(Calendar.DAY_OF_MONTH);

     //Toast.makeText(getApplicationContext(),""+ day+"-"+month+1+"-"+year,5).show(); 
   //Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
   }

    public void onDateSet(DatePicker view, int year, int month, int day) {
   //Do something with the date chosen by the user
        int mon=month+1;
        Date strtdate,enddate;
        DatePickerDialog d = new DatePickerDialog(getActivity(), this, year, mon, day);

        if(getTag() == "startDate")
        {
            String dd_s = null,mm_s = null;
            Date old_d;
            start_date_dp_btn = (Button)findViewById(R.id.btn_dp_strt_date);
            if(day<10)
            {
                dd_s = "0"+day;
            }
            else
            {
                dd_s = day+"";
            }
            if(mon<10)
            {
                mm_s = "0"+mon;
            }
            else
            {
                mm_s = mon+"";
            }
            start_date_dp_btn.setText(dd_s+"-"+mm_s+"-"+year);
            Toast.makeText(getApplicationContext(),""+ day+"-"+mon+"-"+year,5).show();

            c1 = Calendar.getInstance();

            c1.set(year, mon, day, hr1, min1);
            ms1 = c1.getTimeInMillis(); 

            long date2 = ms1/(1000*60*60*24);
            Log.i("Start date", ""+date2);

        }
        if(getTag() == "endDate")
        {
            String dd_e = null,mm_e = null;
            end_date_dp_btn = (Button)findViewById(R.id.btn_dp_end_date);
            if(day<10)
            {
                dd_e = "0"+day;
            }
            else
            {
                dd_e = day+"";
            }
            if(mon<10)
            {
                mm_e = "0"+mon;
            }
            else
            {
                mm_e = mon+"";
            }
            end_date_dp_btn.setText(dd_e+"-"+mm_e+"-"+year);

            c2 = Calendar.getInstance();
            c2.set(year, mon, day, hr2, min2);
            ms2 = c2.getTimeInMillis();

            long date2 = ms2/(1000*60*60*24);
            Log.i("End date", ""+date2);
            long date1 = ms1/(1000*60*60*24);
            diff = (ms2-ms1)/(1000*60*60*24);

            long difference = date2 - date1;//(strtdate.getTime() - enddate.getTime())/1000*60*60*24;
            Log.i("difference", ""+difference);
            if(difference>0)//(ms2/1000*60*60)>(ms1/1000*60*60))//diff>0)
            {  
               long num = difference+1;//((ms2/1000*60*60)-(ms1/1000*60*60))+1;//((ms2-ms1)/1000*60*60*24)+1;
               event_days_ed = (EditText)findViewById(R.id.ed_days_event);
               event_days_ed.setText((num)+"");
               save_btn.setEnabled(true);
            }
            else if(difference==0)
            {
                event_days_ed = (EditText)findViewById(R.id.ed_days_event);
                event_days_ed.setText((difference+1)+"");
                save_btn.setEnabled(true);
            }
            else if(difference<0 )//||(ms2
1
nl ja de
похоже, что вы излишне усложнили код, иначе разница между двумя датами довольно проста
добавлено автор Shaista Naaz, источник
K тогда pls помогают мне где я пошел неправильно !!
добавлено автор Deepthi, источник
@ Shaista Naaz: пожалуйста, найдите, были ли я ошибался .. :(
добавлено автор Deepthi, источник
@venkat: no not yet :(
добавлено автор Deepthi, источник

2 ответы

See This & this

Кроме того, существует библиотека Joda , чтобы иметь дело с датой и временем. Подробнее см. Это

1
добавлено
рад, что вы решили свою проблему
добавлено автор edwin, источник
Большое спасибо за ответ! Теперь это работает как шарм :)
добавлено автор Deepthi, источник

Попробуй это,

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

    public void onDateSet(DatePicker view, int myear, int monthOfYear,
            int dayOfMonth) {
        try {
            selectedDate = new SimpleDateFormat("yyyy/MM/dd").parse(myear
                    + "/" + monthOfYear + "/" + dayOfMonth);
            String.valueOf(year + monthOfYear + dayOfMonth);
            calender();
            currDate = new Date();

            month = monthOfYear;
            day = dayOfMonth;
            year = myear;
            currentdate = currDate.getDay();
            currentmonth = currDate.getMonth();
            currentyear = currDate.getYear();
            String.valueOf(currentyear + currentmonth + currentdate);

            selectedDate.after(currDate);
            selectedDate.before(currDate);

            if ((month >= mMonth && day >= mDay && year >= mYear)
                    || (month == mMonth && day == mDay && year == mYear)) {
                if ((day > mDay) || (day == mDay)) {
                    a = selectedDate.toString();

                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();

                } else if (day < mDay) {

                    Toast.makeText(getApplicationContext(),
                            "Kindly enter valid date", Toast.LENGTH_SHORT)
                            .show();
                    mDateDisplay.setText(currDate.getDate());

                }
            } else if (year < mYear) {
                if (month > mMonth && month == mMonth && month < mMonth) {
                    Toast.makeText(getApplicationContext(),
                            "Kindly enter valid date", Toast.LENGTH_SHORT)
                            .show();
                    mDateDisplay.setText(currDate.getDate());
                }

            } else if (month < mMonth) {
                if (day <= mDay || day >= mDay) {
                    Toast.makeText(getApplicationContext(),
                            "Kindly enter valid date", 100).show();
                    mDateDisplay.setText(currDate.getDate());
                }
            } else if (month > mMonth) {
                if (day <= mDay || day >= mDay) {
                    a = selectedDate.toString();

                    mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();

                    calender();
                }
            }

            else if (month <= mMonth && day <= mDay && year <= mYear) {
                if (month <= mMonth)
                    Toast.makeText(getApplicationContext(),
                            "Kindly enter valid date", 100).show();
                mDateDisplay.setText(currDate.getDate());

            }

        } catch (Exception e) {
            e.getMessage();

        }
    }
};

protected void calender() {
   //TODO Auto-generated method stub
    c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    mhour = c.get(Calendar.HOUR);
    mmin = c.get(Calendar.MINUTE);

}
0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

All That JS
All That JS
417 участник(ов)

JS на русском

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)