एंड्रॉइड में डेटपिकर संवाद में अधिकतम तिथि कैसे निर्धारित करें?


107

मेरे आवेदन में डेट पिकर से लेकर सेट डेट का उपयोग कर रहा हूं। मैं डेट पिकर सेट करना चाहता हूं। आज की तारीख सिस्टम की तारीख के अनुसार है। मुझे नहीं पता कि आज की तारीख में डेट पिकर की अधिकतम तिथि कैसे तय की जाए। इस समस्या के समाधान के लिये।

मेरी तिथि पिकर कोडिंग है:

private int pYear;
private int pMonth;
private int pDay;
static final int DATE_DIALOG_ID = 0;

final Calendar c = Calendar.getInstance();
pYear = c.get(Calendar.YEAR);
pMonth = c.get(Calendar.MONTH);
pDay = c.get(Calendar.DAY_OF_MONTH);

// Date picker
public Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:

        DatePickerDialog.OnDateSetListener pDateSetListener = new DatePickerDialog.OnDateSetListener() {

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

                pYear = year;
                pMonth = monthOfYear;
                pDay = dayOfMonth;

                e_dob.setText(new StringBuilder()
                        // to set date in editext
                        .append(pDay).append("/").append(pMonth + 1)
                        .append("/").append(pYear).append(" "));
            }
        };
        return new DatePickerDialog(this, pDateSetListener, pYear, pMonth,
                pDay);

    }
    return null;
}

जवाबों:


314

का उपयोग करें setMaxDate()

उदाहरण के लिए, return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay)कथन को इस तरह से बदलें :

    DatePickerDialog dialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
    dialog.getDatePicker().setMaxDate(new Date().getTime());
    return dialog;

2
आपका उत्तर एक उत्थान के योग्य है;), आप छोटा रास्ता दिखाते हैं!
योअन हरकौएट

1
सभी एपी के लिए अधिकतम तिथि निर्धारित करने के लिए इस gist.github.com/Kishanjvaghela/7b8738bb224c5f2e652 पर
किशन वाघेला

1
setMaxDateदिनांक की स्थापना के बाद setMaxDate, हमेशा हाइलाइट किया जाता है और चयनित किया जाता है, यहाँ चित्र है
hasnain_ahmad

@hasnain_ahmad हां मुझे एहसास हुआ कि मुझे भी अभी तक कोई समाधान नहीं मिला।
निकोलस

32

आज की तारीख (और समय) प्राप्त करें और उन्हें अधिकतम तिथि के रूप में लागू करें।

Calendar c = Calendar.getInstance();
c.set(2017, 0, 1);//Year,Mounth -1,Day
your_date_picker.setMaxDate(c.getTimeInMillis());

हम यह भी कर सकते हैं (इस Stackoverflow जवाब के लिए System.currentTimeMillis () बनाम कैलेंडर विधि)

long now = System.currentTimeMillis() - 1000;
dp_time.setMinDate(now);
dp_time.setMaxDate(now+(1000*60*60*24*7)); //After 7 Days from Now

कृपया कुछ स्पष्टीकरण जोड़ें कि कोड क्या कर रहा है।
सैफुर

2
यह किसी भी अधिकतम तिथि को निर्धारित करने के लिए एकदम सही और वास्तविक उत्तर है
आनंद सेजानी

मैं भी इस काम के लिए मिनट की तलाश में था। धन्यवाद!
सुपरयूजर

12

आप इस पंक्ति को बदलने का प्रयास कर सकते हैं:

return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);

उन लोगों द्वारा:

DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();

Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date
return dpDialog;

6

इसे इस्तेमाल करे

मैंने बहुत सारे समाधानों की कोशिश की है, लेकिन न तो वे काम कर रहे थे, अपने आधे दिन को बर्बाद करने के बाद आखिरकार मैंने एक समाधान बनाया।

यह कोड आपको न्यूनतम और अधिकतम तिथि, महीना और वर्ष के साथ एक तारीखपत्रक दिखाएगा, जो भी आप इसे संशोधित करना चाहते हैं।

final Calendar calendar = Calendar.getInstance();
                DatePickerDialog dialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker arg0, int year, int month, int day_of_month) {
                        calendar.set(Calendar.YEAR, year);
                        calendar.set(Calendar.MONTH, (month+1));
                        calendar.set(Calendar.DAY_OF_MONTH, day_of_month);
                        String myFormat = "dd/MM/yyyy";
                        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault());
                        your_edittext.setText(sdf.format(calendar.getTime()));
                    }
                },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
                dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());// TODO: used to hide previous date,month and year
                calendar.add(Calendar.YEAR, 0);
                dialog.getDatePicker().setMaxDate(calendar.getTimeInMillis());// TODO: used to hide future date,month and year
                dialog.show();

आउटपुट: - पिछले और भविष्य के कैलेंडर को अक्षम करें

यहां छवि विवरण दर्ज करें


कोड पेस्ट करते समय मुझे त्रुटि हो रही है - getActivity () लाल रंग में है। त्रुटि "प्रतीक विधि getActivity () नहीं मिल सकती है"। यह एक विधि बनाने या संपत्ति बनाने के लिए चीनी है।
श्रीराम नादिमिंटि

यह पता लगाया - यह गतिविधि है जहाँ से हम बुला रहे हैं। यदि DatePickerDialog का सिंटैक्स टिप्पणियों में दिखाया जाता है, तो यह मददगार होता। इस उत्तर को देखते हुए
श्रीराम नादिमिंटि

@ श्रीरामनदिमन्ति getActivity () एक संदर्भ है जिसे आप "इस" का उपयोग कर सकते हैं यदि आप गतिविधि में उपयोग कर रहे हैं और Fragment उपयोग के लिए "getActivity ()"
सुनील

धन्यवाद। डेटा को "MyDate", "MyMonth" और "MyYear" में कैसे पास किया जाए जो सार्वजनिक Int वैरिएबल हैं? मुझे काम करने के लिए
सेटटेक्स्ट

3
private int pYear;
private int pMonth;
private int pDay;
static final int DATE_DIALOG_ID = 0;

/**inside oncreate */
final Calendar c = Calendar.getInstance();
         pYear= c.get(Calendar.YEAR);
         pMonth = c.get(Calendar.MONTH);
         pDay = c.get(Calendar.DAY_OF_MONTH);


 @Override
     protected Dialog onCreateDialog(int id) {
             switch (id) {
             case DATE_DIALOG_ID:
                     return new DatePickerDialog(this,
                             mDateSetListener,
                             pYear, pMonth-1, pDay);
            }

             return null;
     }
     protected void onPrepareDialog(int id, Dialog dialog) {
             switch (id) {
             case DATE_DIALOG_ID:
                     ((DatePickerDialog) dialog).updateDate(pYear, pMonth-1, pDay);
                     break;
             }
     }   
     private DatePickerDialog.OnDateSetListener mDateSetListener =
         new DatePickerDialog.OnDateSetListener() {
         public void onDateSet(DatePicker view, int year, int monthOfYear,
                         int dayOfMonth) {
                // write your code here to get the selected Date
         }
 };

कोशिश करें कि यह काम करे। धन्यवाद


2

मुख्य विधि में सीधे इस कोड का उपयोग करें आशा है कि यह आपकी मदद करेगा ...

@RequiresApi(api = Build.VERSION_CODES.N)       
public DatePickerDialog datePickerDialog_db()
{

    DatePickerDialog pickerDialog = new DatePickerDialog(getApplicationContext(),your view, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
    myCalendar.get(Calendar.DAY_OF_MONTH));

    pickerDialog.getDatePicker().setMaxDate(Calendar.getInstance().getTimeInMillis());

    pickerDialog.show();

    return null;       
}

1

मेरे कस्टम डेटपिकरडियलॉग को देखें

https://github.com/Redman1037/EightFoldsDatePickerDialog

import android.app.DatePickerDialog;
import android.content.Context;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;


/**
 * Created by Manohar on 14/08/2017.
 */

public class EightFoldsDatePickerDialog extends DatePickerDialog {


    private DatePickerDialog datePickerDialog;
    private SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");

    @RequiresApi(api = Build.VERSION_CODES.N)
    public EightFoldsDatePickerDialog(@NonNull Context context) {
        super(context);
        datePickerDialog = new DatePickerDialog(context);

    }

    @RequiresApi(api = Build.VERSION_CODES.N)
    public EightFoldsDatePickerDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
        datePickerDialog = new DatePickerDialog(context, themeResId);
    }

    public EightFoldsDatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener, int year, int month, int dayOfMonth) {
        super(context, listener, year, month, dayOfMonth);
        datePickerDialog = new DatePickerDialog(context, listener, year, month, dayOfMonth);

    }

    public EightFoldsDatePickerDialog(@NonNull Context context, int themeResId, @Nullable OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) {
        super(context, themeResId, listener, year, monthOfYear, dayOfMonth);
        datePickerDialog = new DatePickerDialog(context, themeResId, listener, year, monthOfYear, dayOfMonth);
    }

    public void show() {
        datePickerDialog.show();
    }


    public void setMinDate(int year, int month, int day) {

        String minDate = "" + day + "-" + getmonth(month) + "-" + year;

        try {
            datePickerDialog.getDatePicker().setMinDate(dateFormat.parse(minDate).getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

    public void setMaxDate(int year, int month, int day) {

        String maxDate = "" + day + "-" + getmonth(month) + "-" + year;
        try {
            datePickerDialog.getDatePicker().setMaxDate(dateFormat.parse(maxDate).getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }

    public void setTodayAsMaxDate() {

        datePickerDialog.getDatePicker().setMaxDate(Calendar.getInstance().getTime().getTime());

    }

    public void setTodayAsMinDate() {

        datePickerDialog.getDatePicker().setMinDate(Calendar.getInstance().getTime().getTime());

    }


    private String getmonth(int month) {

        switch (month) {
            case 1:
                return "January";

            case 2:
                return "February";

            case 3:
                return "March";

            case 4:
                return "April";

            case 5:
                return "May";

            case 6:
                return "June";

            case 7:
                return "July";

            case 8:
                return "August";

            case 9:
                return "September";

            case 10:
                return "October";

            case 11:
                return "November";

            case 12:
                return "December";


        }
        return "January";

    }

}

प्रयोग

EightFoldsDatePickerDialog.java को अपने प्रोजेक्ट में कॉपी करें

EightFoldsDatePickerDialog datePickerDialog=new EightFoldsDatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
              //Do something with date
                Toast.makeText(this, "Year "+year+" month "+month+" day "+dayOfMonth, Toast.LENGTH_SHORT).show();
            }
        },year,month,day);   // give any  year , month , day values, this will be opened by default in dialog

        datePickerDialog.setMinDate(2017,8,7); //arguments are   year , month , date (use for setting custom min date)
        datePickerDialog.setMaxDate(2017,8,25);  //arguments are   year , month , date (use for setting custom max date)

       // datePickerDialog.setTodayAsMinDate();   // sets today's date as min date
       // datePickerDialog.setTodayAsMaxDate();    // sets today's date as max date

        datePickerDialog.show();

परिणाम


1

निजी शून्य चयन () {

    final Calendar calendar = Calendar.getInstance();
    mYear = calendar.get(Calendar.YEAR);
    mDay = calendar.get(Calendar.DATE);
    mMonth = calendar.get(Calendar.MONTH);

    DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @SuppressLint("LongLogTag")
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            strDateOfBirth = (month + 1) + "-" + dayOfMonth + "-" + year;

            //********************** check and set date with append 0 at starting***************************
            if (dayOfMonth < 10) {
                strNewDay = "0" + dayOfMonth;
            } else {
                strNewDay = dayOfMonth + "";
            }
            if (month + 1 < 10) {
                strNewMonth = "0" + (month + 1);
            } else {
                strNewMonth = (month + 1) + "";
            }

            Log.e("strnewDay *****************", strNewDay + "");
            Log.e("strNewMonth *****************", strNewMonth + "");

            //    etDateOfBirth.setText(dayOfMonth + " / " + (month + 1) + " / " + year);
            etDateOfBirth.setText(strNewDay + " / " + strNewMonth + " / " + year);

            Log.e("strDateOfBirth *******************", strDateOfBirth + "");

        }
    }, mYear, mMonth, mDay);

    datePickerDialog.show();

    //*************** input date of birth must be greater than or equal to 18 ************************************

    Calendar maxDate = Calendar.getInstance();
    maxDate.set(Calendar.DAY_OF_MONTH, mDay);
    maxDate.set(Calendar.MONTH, mMonth);
    maxDate.set(Calendar.YEAR, mYear - 18);
    datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());

    //*************** input date of birth must be less than today date ************************************
    //   datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());

}

क्या आप कुछ स्पष्टीकरण जोड़ सकते हैं कि आपने यहां क्या किया है और यह मूल कोड से कैसे भिन्न है? तुम भी शायद कोड या त्रुटि लॉग टिप्पणी नहीं करना चाहते हैं।
रूप

इसमें उपयोगकर्ता अपने आवेदन में आवश्यक आयु मानदंड के अनुसार तिथि निर्धारित कर सकता है। जैसे उपयोगकर्ता केवल 18 वर्ष की आयु निर्धारित कर सकता है, तब वह इस कोड का उपयोग कर सकता है।
अनुराग पांडेय

1
      Calendar cal = Calendar.getInstance();
      datePickerDialog.getDatePicker().setMinDate(cal.getTimeInMillis());
    //To set make max 7days date selection on current year and month
    datePickerDialog.getDatePicker().setMaxDate((cal.getTimeInMillis())+(1000*60*60*24*6));

    datePickerDialog.setTitle("Select Date");
    datePickerDialog.show();

1

यहाँ एक कोटलिन एक्सटेंशन फ़ंक्शन है:

fun EditText.transformIntoDatePicker(context: Context, format: String, maxDate: Date? = null) {
    isFocusableInTouchMode = false
    isClickable = true
    isFocusable = false

    val myCalendar = Calendar.getInstance()
    val datePickerOnDataSetListener =
        DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
            myCalendar.set(Calendar.YEAR, year)
            myCalendar.set(Calendar.MONTH, monthOfYear)
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
            val sdf = SimpleDateFormat(format, Locale.UK)
            setText(sdf.format(myCalendar.time))
        }

    setOnClickListener {
        DatePickerDialog(
            context, datePickerOnDataSetListener, myCalendar
                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
            myCalendar.get(Calendar.DAY_OF_MONTH)
        ).run {
            maxDate?.time?.also { datePicker.maxDate = it }
            show()
        }
    }
}

उपयोग:

गतिविधि में:

editText.transformIntoDatePicker(this, "MM/dd/yyyy")
editText.transformIntoDatePicker(this, "MM/dd/yyyy", Date())

टुकड़ों में:

editText.transformIntoDatePicker(requireContext(), "MM/dd/yyyy")
editText.transformIntoDatePicker(requireContext(), "MM/dd/yyyy", Date())

0

आप कस्टम दिनांक पिकर बना सकते हैं , जो सभी एपीआई स्तरों के लिए काम करता है।

public class CustomDatePickerDialog extends DatePickerDialog {

    int maxYear;
    int maxMonth;
    int maxDay;

    public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
        super(context, callBack, year, monthOfYear, dayOfMonth);
    }

    public void setMaxDate(long maxDate) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            getDatePicker().setMaxDate(System.currentTimeMillis());
        } else {
            final Calendar c = Calendar.getInstance();
            c.setTimeInMillis(maxDate);
            maxYear = c.get(Calendar.YEAR);
            maxMonth = c.get(Calendar.MONTH);
            maxDay = c.get(Calendar.DAY_OF_MONTH);
        }
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            super.onDateChanged(view, year, monthOfYear, dayOfMonth);
        } else {
            if (year > maxYear)
                view.updateDate(maxYear, maxMonth, maxDay);

            if (monthOfYear > maxMonth && year == maxYear)
                view.updateDate(maxYear, maxMonth, maxDay);

            if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
                view.updateDate(maxYear, maxMonth, maxDay);
        }
    }

अधिकतम तिथि निर्धारित करें

final CustomDatePickerDialog pickerDialog = new CustomDatePickerDialog(getActivity(),
        myDateListener, year, month, day);
pickerDialog.setMaxDate(System.currentTimeMillis());
pickerDialog.show();

0

मैंने इसका अनुसरण करके हल किया

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);
    datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
    datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());    

आशा है इससे आपकी मदद होगी


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.