如何在android的日期选择器中设置特定日期

Posted

技术标签:

【中文标题】如何在android的日期选择器中设置特定日期【英文标题】:How to set a specific date in date picker in android 【发布时间】:2014-12-06 07:00:33 【问题描述】:

我尝试了很多,但都不起作用。

我需要我的日期选择器,日期从 2014 年 9 月 1 日开始。但它从 1900 年开始。 我设置了最小日期概念,它会消失所有过去的日期。 请大家帮忙。

public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.daty);


        click=(ImageView)findViewById(R.id.click);


        hdate=(TextView)findViewById(R.id.hdate);

        timeStamp = new SimpleDateFormat("dd/MM/yyyy").format(new Date(System.currentTimeMillis()));


        hdate.setText(timeStamp);


        final Calendar myCalendar = Calendar.getInstance();

        final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() 



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

                          myCalendar.set(Calendar.YEAR, year);
                        myCalendar.set(Calendar.MONTH, monthOfYear);
                        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        click.setVisibility(View.VISIBLE);


                        updateLabel();

            
            private void updateLabel() 
                // TODO Auto-generated method stub

                  String myFormat = "dd/MM/yyyy";
                  SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
                  hdate.setText(sdf.format(myCalendar.getTime()));


            

        ;

        hdate.setOnClickListener(new OnClickListener() 



            public void onClick(View v) 

                DatePickerDialog datePickerDialog = new DatePickerDialog(Daty.this,date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH));




                datePickerDialog.show();
                datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());    

            


        );


        click.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                // TODO Auto-generated method stub


                         Intent in=new Intent(Daty.this,Mainy.class);
                            startActivity(in);

        
        );

    


【问题讨论】:

Setting custom date in DatePicker的可能重复 我刚刚为您的问题添加了一个新答案! 【参考方案1】:
class DatePickerDialog1964 extends DatePickerDialog 
DatePickerDialog1964(Context c) 
    super(c, null, 2013, 4, 21);

    @SuppressWarnings("deprecation")
    Date min = new Date(2013-1900, 4, 21);

    DatePicker p = getDatePicker();
    CalendarView cv = p.getCalendarView(); // should check for null
    long cur = cv.getDate();
    int d = cv.getFirstDayOfWeek();
    p.setMinDate(min.getTime());
    cv.setDate(cur + 1000L*60*60*24*40);
    cv.setFirstDayOfWeek((d + 1) % 7);
    cv.setDate(cur);
    cv.setFirstDayOfWeek(d);

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

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

【讨论】:

谢谢,但我需要从 2014 年 1 月 1 日开始的日期选择器......有没有可能【参考方案2】:

您可以通过此代码设置:

Calendar cal=Calendar.getInstance(Locale.ENGLISH);
datePickerDialog .init(cal.getTime().getYear()+1900, cal.getTime().getMonth(), cal.getTime().getDay(), this);

编辑

要将最小日期设置为您的DatePicker,您可以使用:

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

将今天的日期设置为最小日期,所有过去的日期都被禁用。

注意:setMinDate 是在 API 11 中引入的

编辑 #2

您需要为此创建自定义DatePickerDialog

class DatePickerDialog1964 extends DatePickerDialog 
    DatePickerDialog1964(Context c) 
    super(c, null, 2014, 1, 1);

    @SuppressWarnings("deprecation")
    Date min = new Date(2014-1900, 1, 1);

    DatePicker p = getDatePicker();
    CalendarView cv = p.getCalendarView(); // should check for null
    long cur = cv.getDate();
    int d = cv.getFirstDayOfWeek();
    p.setMinDate(min.getTime());
    cv.setDate(cur + 1000L*60*60*24*40);
    cv.setFirstDayOfWeek((d + 1) % 7);
    cv.setDate(cur);
    cv.setFirstDayOfWeek(d);
  

要使用这个:

new DatePickerDialog1964(context).show();

【讨论】:

你可以像这样在 DatePicker 中设置最小日期,检查我的编辑 谢谢,但我需要从 2014 年 1 月 1 日开始的日期选择器......有没有可能【参考方案3】:

简单的解决方案:

int year = 2014;
int month = 1;
int day = 1;
DatePickerDialog datePickerDialog = new DatePickerDialog(EditProfileScreen.this, 
android.R.style.Theme_Holo_Light_Dialog,
                    onDateSetListener, year, month, day);

datePickerDialog.setTitle(getString(R.string.birthday));
datePickerDialog.show();

所以日期选择器如您所愿从 2014 年 1 月 1 日开始 :)

【讨论】:

以上是关于如何在android的日期选择器中设置特定日期的主要内容,如果未能解决你的问题,请参考以下文章

默认情况下在日期选择器中设置特定日期

如何在 API 28 中设置 android 日期和时间选择器的样式

在android中设置时间和日期到日期选择器和时间选择器

如何在 Android DatePicker 中设置最小和最大日期?

如何在物化日期选择器中设置日期

如何在日期选择器中设置日期限制