在Android中为日期选择器和时间选择器设置日期和时间

46

我在我的应用程序中使用日期选择器和时间选择器。我希望在页面加载时设置日期和时间。这是否可行?如何实现?

6个回答

117

我解决了一个类似的问题,方法如下:

Calendar cal = Calendar.getInstance();

int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);

datePicker.updateDate(year, month, day);

timePicker.setCurrentHour(hour);
timePicker.setCurrentMinute(min);

1
自Android API 23以来,setHour()和setMinute()函数可用。 - Zon
更新月份从0(一月)到11(十二月),但日期从1开始。 - Tim Biegeleisen

14

使用 JodaTime

JodaTime 是一个非常流行且有用的日期与时间处理库,适用于 Java。如果您还没有使用它,我强烈建议您去了解一下。

以下是一个简单的示例,演示如何从一个 DateTime 对象中设置一个 DatePickerTimePicker,该对象可以是当前日期或过去或未来的任何日期(在此例中,属性名为inspected_at):

DatePicker datePicker = (DatePicker) findViewById(R.id.inspected_at_date);
TimePicker timePicker = (TimePicker) findViewById(R.id.inspected_at_time);

DateTime inspected_at = DateTime.now()                // Typically pulled from DB.

int year    = inspected_at.getYear() ;
int month   = inspected_at.getMonthOfYear() - 1;      // Need to subtract 1 here.
int day     = inspected_at.getDayOfMonth();  
int hour    = inspected_at.getHourOfDay();
int minutes = inspected_at.getMinuteOfHour();

datePicker.updateDate(year, month, day);              // Set date.

timePicker.setCurrentHour(hour);                      // Set time.
timePicker.setCurrentMinute(minutes);
希望能帮到你。 JP

1
如果你正在阅读这个问题,而你不知道JodaTime是什么,请花些时间去了解一下。它比java.util.Calendar有很多优势。 - jmaculate
需要注意的是,Java8引入了java.time包,它提供了出色的日期和时间处理支持,而无需第三方依赖于JodaTime。 - Reinstate Monica

7

DatePicker 中有一个更新日期的方法 updateDate

以下是我在其中一个应用程序中使用的内容,不使用对话框:

//set datePicker to position
String date_saved = project_row.getString(
    project_row.getColumnIndex("project_startdate"));

int day  = Integer.parseInt(date_saved.substring(0,2));
int year = Integer.parseInt(date_saved.substring(5,9));
String month = date_saved.substring(2,5);
int month_code = getMonthInt(month);

project_startdate_data = (DatePicker) findViewById(R.id.project_startdate_data);
project_startdate_data.updateDate(year, month_code, day);

其中project_row是我的游标,日期保存在列project_startdate中,例如22MAY2012

您需要这个:

private int getMonthInt(String month) {
    if (month.equalsIgnoreCase("JAN")) return 0;
    if (month.equalsIgnoreCase("FEB")) return 1;
    if (month.equalsIgnoreCase("MAR")) return 2;
    if (month.equalsIgnoreCase("APR")) return 3;
    if (month.equalsIgnoreCase("MAY")) return 4;
    if (month.equalsIgnoreCase("JUN")) return 5;
    if (month.equalsIgnoreCase("JUL")) return 6;
    if (month.equalsIgnoreCase("AUG")) return 7;
    if (month.equalsIgnoreCase("SEP")) return 8;
    if (month.equalsIgnoreCase("OCT")) return 9;
    if (month.equalsIgnoreCase("NOV")) return 10;
    if (month.equalsIgnoreCase("DEC")) return 11;

    //return -1 if month code not found
    return -1;
}

2

1

请检查this

onCreate();中使用showDialog(TIME_DIALOG_ID);函数。


我没有将日期时间选择器显示为对话框。 - andro-girl

0
请使用 Kotlin 中的此代码。
private fun setTime(hours: Int, minutes: Int) {
        @Suppress("DEPRECATION")
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            binding.timePickerLayout.timePicker.hour = hours
            binding.timePickerLayout.timePicker.minute = minutes
        } else {
            binding.timePickerLayout.timePicker.currentHour = hours
            binding.timePickerLayout.timePicker.currentMinute = minutes
        }
    }

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