如何使用Calendar []数组在wdullaer Material DateTime Picker中设置setDisabledDays(Calendar []天)中禁用的天数

时间:2018-03-08 14:14:03

标签: java android date calendar

我尝试使用wdullaer的物料日期时间选择器的setDisabledDays(Calendar[] days)方法禁用某些天,这是Android的替代日期时间选择器。

但我不知道如何使用Calendar[]

将日期传递给方法
abscanButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        datePickerDialog = DatePickerDialog.newInstance(MainActivity.this, Year, Month, Day);

        datePickerDialog.showYearPickerFirst(false);

        datePickerDialog.setMinDate(calendar);

        Calendar[] days = new Calendar[3];
        days[0] = // I don't know how to do this part
        datePickerDialog.setDisabledDays(days);

        datePickerDialog.show(getFragmentManager(), "DatePickerDialog");
    }
}

我成功setMinDate()没有任何错误。我只需要知道如何创建我将放在Calendar数组中的日期。

注意:我尝试手动添加日期。

1 个答案:

答案 0 :(得分:0)

创建Calendar非常简单:

Calendar cal = Calendar.getInstance();

此日历将包含JVM默认时区的当前日期和时间。如果您想设置不同的日期,月份或其他,请使用set方法:

// set to March 5th 2018
cal.set(Calendar.DAY_OF_MONTH, 5);
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.YEAR, 2018);

在此API中,月份从零开始(1月为零,2月为1等),因此最好使用常量(例如Calendar.MARCH)以避免任何后续行为 - 一个错误。

此类是可变的,因此在将其分配给数组之前,始终使用getInstance()创建一个新实例。

Threeten Backport

如评论中所述,您可以使用this library - 更好,并与java.time API兼容(这将使未来的迁移更容易,因为java.time类可用于较新的Android API级别)。了解如何安装/配置此lib here

使用此lib,可以更轻松地创建特定日期:

// March 5th 2018
LocalDate date = LocalDate.of(2018, Month.MARCH, 5);

或者,要获取当前日期:

LocalDate date = LocalDate.now();

然后,要转换为Calendar,您必须将其设置为时区然后转换:

Calendar cal = DateTimeUtils.toGregorianCalendar(date.atStartOfDay(ZoneId.systemDefault()));

起初看起来似乎更难,但if you study this API,您很快就会看到好处。 Calendar遵循一种一刀切的设计,但已知它很麻烦且过时。新API为每个用例提供不同的日期/时间类型,您必须明确地在它们之间进行转换以获得所需的内容。

这就是为什么上面的转换代码看起来很混乱,但是一旦你明白了,它就比使用Calendar容易得多。