从Android日期选择器中获取日期

36

我想从Android的日期选择器小部件中获取日期。我尝试过以下代码:

Date date1= (Date) new Date
   (dpBirthDate.getYear(), dpBirthDate.getMonth(), dpBirthDate.getDayOfMonth());
date1  = (Date) new SimpleDateFormat("yyyy-MM-dd").parse(date1.toString());

但是我得到的日期格式是这样的mon 7 dec 2011 time... 我想要的只是yyyy-MM-dd的格式,以便将其存储到数据库中。

我也尝试过像这样连接年-月-日,但问题是例如今天2011-12-7,它的日应该是07才能有效。

你能帮帮我吗?


8
哇,DatePicker居然没有getDate方法???安卓/谷歌,拜托了。 - Marian Paździoch
4个回答

85

我使用这个:

    /**
 * 
 * @param datePicker
 * @return a java.util.Date
 */
public static java.util.Date getDateFromDatePicker(DatePicker datePicker){
    int day = datePicker.getDayOfMonth();
    int month = datePicker.getMonth();
    int year =  datePicker.getYear();

    Calendar calendar = Calendar.getInstance();
    calendar.set(year, month, day);

    return calendar.getTime();
}

1
这对我大部分都起作用了,只是我需要将DatePicker定义为android.widget.DatePicker。谢谢 :) - Chris
1
如果您正在使用Kotlin,您甚至可以以更优雅的方式完成它。参考链接 - lcnicolau
非常感谢你,伙计。 - Naimul Kabir

14

你应该使用SimpleDateFormat.format函数将Date对象转换为String,示例如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = sdf.format(date1);

我认为你刚才理解反了。你需要使用format将日期转换为字符串,而使用parse将字符串转换为日期。


将代码更改为以下内容:Date date1 = (Date) new Date(dpBirthDate.getYear(), dpBirthDate.getMonth(), dpBirthDate.getDayOfMonth()); dates = new SimpleDateFormat("yyyy-MM-dd").format(date1); 我得到了3911-12-07,有什么问题吗? - Aymen Taarit
在将日期对象传递进去之前,请检查其年份是多少。 - skynet
我该如何修复日期格式,请帮忙!我总是得到以3911开头的日期。 - Aymen Taarit
那么你创建日期对象的方式是错误的。正如我所说,你应该调试一下实际的值。如果你查看Date的文档,你会发现你传入的年份必须是“减去1900年的年份”,这可能就是你的错误所在。Java的Date对象必须小心处理。 - skynet
谢谢,现在我清楚了,我应该执行3911-1900以获得正确的年份2011。 - Aymen Taarit

5

我知道这是老问题,但我很难找到它。为了后人记录:

场景:需要在视图中使用 yyyy-mm-dd 格式的日期。

    date_field = (EditText)findViewById(R.id.input_date);
        date_field.setFocusable(false); // disable editing of this field
        date_field.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                chooseDate();
            }
        });

 private void chooseDate() {
        final Calendar calendar = Calendar.getInstance();
        final int year = calendar.get(Calendar.YEAR);
        final int month = calendar.get(Calendar.MONTH);
        final int day = calendar.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog datePicker =
            new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(final DatePicker view, final int year, final int month,
                                      final int dayOfMonth) {

                    @SuppressLint("SimpleDateFormat")
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    calendar.set(year, month, dayOfMonth);
                    String dateString = sdf.format(calendar.getTime());

                    date_field.setText(dateString); // set the date
                }
            }, year, month, day); // set date picker to current date

        datePicker.show();

        datePicker.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(final DialogInterface dialog) {
                dialog.dismiss();
            }
        });
    }

希望这能帮助到某些人。

0
如果您的格式仅为数字,例如:dd/MM/yyyy,则可以使用Kotlin方式:
val dp = binding.datePicker
val date =  "${dp.dayOfMonth.let { if(it < 10) "0$it" else it }}/${dp.month.plus(1).let { if(it < 10) "0$it" else it }}/${dp.year}"

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