如何从Android的DatePicker小部件中获取日期?

48

我在Android中使用了一个DatePicker小部件,以让用户设置日期,并希望在确认按钮被点击时获取日期值,我该怎么做?

7个回答

87

试试这个:

 DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1);
 int day = datePicker.getDayOfMonth();
 int month = datePicker.getMonth() + 1;
 int year = datePicker.getYear();

1
当我在UI中更新日期选择器的值时,这似乎对我不起作用。它给我了它开始的价值。 - Gene Bo
2
好的,请尝试将OnDateSetListener设置为datePicker。 - Onuray Sahin
1
这对我有效。我这样设置这些值String day = String.valueOf(datePicker.getDayOfMonth(); 目前它完美工作,因为在我的情况下将整数转换为字符串以进行SQL数据库的插入操作。 - natur3

23
我成功地通过编程设置了MinDate和MaxDate,代码如下:
    final Calendar c = Calendar.getInstance();

    int maxYear = c.get(Calendar.YEAR) - 20; // this year ( 2011 ) - 20 = 1991
    int maxMonth = c.get(Calendar.MONTH);
    int maxDay = c.get(Calendar.DAY_OF_MONTH);

    int minYear = 1960;
    int minMonth = 0; // january
    int minDay = 25;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create_account);
        BirthDateDP = (DatePicker) findViewById(R.id.create_account_BirthDate_DatePicker);
        BirthDateDP.init(maxYear - 10, maxMonth, maxDay, new OnDateChangedListener()
        {

        @Override
        public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
        {
            if (year < minYear)
                view.updateDate(minYear, minMonth, minDay);

                if (monthOfYear < minMonth && year == minYear)
                view.updateDate(minYear, minMonth, minDay);

                if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
                view.updateDate(minYear, minMonth, minDay);


                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);
        }}); // BirthDateDP.init()
    } // activity

对我来说它工作得很好,享受吧 :)


我想要做相反的操作,也就是最小日期将会是当前日期,而最大日期将会是任何一个大于当前日期的日期。怎么做呢?非常感谢您的帮助。我已经尝试过了,但还是遇到了一些问题。请看这里:https://dev59.com/LV7Va4cB1Zd3GeqPMsKy - mH16

15

如果您正在使用Kotlin,您可以为DatePicker定义一个扩展函数

fun DatePicker.getDate(): Date {
    val calendar = Calendar.getInstance()
    calendar.set(year, month, dayOfMonth)
    return calendar.time
}

然后,只需要:datePicker.getDate()。就好像它一直存在一样。

5
你希望将日期选择器小部件添加到你的应用程序中。在你的活动类中声明全局变量:
private Button mPickDate;
private int mYear;
private int mMonth;
private int mDay;
static final int DATE_DIALOG_ID = 0;

将以下代码写入onCreate()函数中:

//date picker presentation
    mPickDate = (Button) findViewById(R.id.pickDate);//button for showing date picker dialog 
    mPickDate.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) { showDialog(DATE_DIALOG_ID); }
    });

    // get the current date
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);


    // display the current date
    updateDisplay();

在onCreate()函数之外编写这些函数:

//return date picker dialog
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
    }
    return null;
}

//update month day year
private void updateDisplay() {
    mBodyText.setText(//this is the edit text where you want to show the selected date
        new StringBuilder()
            // Month is 0 based so add 1
        .append(mYear).append("-")
        .append(mMonth + 1).append("-")
        .append(mDay).append(""));


            //.append(mMonth + 1).append("-")
            //.append(mDay).append("-")
            //.append(mYear).append(" "));
}

// the call back received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener mDateSetListener =
    new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            mYear = year;
            mMonth = monthOfYear;
            mDay = dayOfMonth;
            updateDisplay();
        }
};

真的很好,如果您需要在EditText中输入生日,也可以实现它。 - Syed Rafay
请注意:onCreateDialog已经被弃用,您可以创建一个DialogFragment来使用。 - Joseph Wambura

4

你也可以使用这段代码...

datePicker = (DatePicker) findViewById(R.id.schedule_datePicker);
int day = datePicker.getDayOfMonth();
int month = datePicker.getMonth() + 1;
int year = datePicker.getYear();


SimpleDateFormat dateFormatter = new SimpleDateFormat("MM-dd-yyyy");
Date d = new Date(year, month, day);
String strDate = dateFormatter.format(d);

1

你也可以使用Calendar.GregorianCalendar Java类。

    GregorianCalendar calendarBeg=new GregorianCalendar(datePicker.getYear(),
        datePicker.getMonth(),datePicker.getDayOfMonth());
    Date begin=calendarBeg.getTime();

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接