我尝试使用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
数组中的日期。
注意:我尝试手动添加日期。
答案 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()
创建一个新实例。
如评论中所述,您可以使用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
容易得多。