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

Posted

技术标签:

【中文标题】如何从 Android 中的 DatePicker 小部件中获取日期?【英文标题】:How to get the date from the DatePicker widget in Android? 【发布时间】:2011-09-19 07:06:05 【问题描述】:

我在 android 中使用 DatePicker 小部件让用户设置日期,并希望在单击确认按钮时获取日期值,我该怎么做?

【问题讨论】:

【参考方案1】:

试试这个:

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

【讨论】:

在更新 UI 中的日期选择器值时,这似乎对我不起作用。它给了我它开始的价值 对。请尝试将 OnDateSetListener 设置为 datePicker。 这对我有用。我像这样设置这些值 String day = String.valueof(datePicker.getDayOfMonth(); 它到目前为止工作得很好,因为它在我的情况下将整数转换为字符串以插入到 sql 数据库。【参考方案2】:

我设法像这样以编程方式设置 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

它对我来说很好,享受:)

【讨论】:

我想做相反的事情,这意味着最小日期将是当前日期,最大日期将是大于当前日期的任何日期。怎么做。任何帮助将不胜感激。我试过但遇到了一些问题。看看这个***.com/questions/8675984/…【参考方案3】:

如果您使用的是 Kotlin,您可以为 DatePicker 定义一个 extension function:

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

那么,就是:datePicker.getDate()。就好像它一直存在一样。

【讨论】:

【参考方案4】:

您的意思是您想将 DatePicker 小部件添加到您的应用中。

将全局变量声明到您的活动类中:

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中输入生日也可以实现 请注意:onCreateDialog已被弃用,您可以创建一个DialogFragment来使用【参考方案5】:

您也可以使用此代码...

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);

【讨论】:

【参考方案6】:

DatePicker 类具有获取月、年、日的方法。或者您可以使用OnDateChangedListener。

【讨论】:

【参考方案7】:

你也可以使用 te Calendar.GregorianCalendar java 类

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

【讨论】:

以上是关于如何从 Android 中的 DatePicker 小部件中获取日期?的主要内容,如果未能解决你的问题,请参考以下文章

你如何扩展像Android.widget包中的DatePicker PagerAdapter这样的Android类?

如何从 C# 中的 DatePicker(WPF) 中获取价值?

如何从默认的白色更改 DatePicker 对话框的背景颜色?

如何限定datepicker的选择日期范围

如何从 SwiftUI 中的图形样式 DatePicker 中删除侧边距?

如何从我的 DatePicker 片段中传输格式化的日期字符串?