代码之家  ›  专栏  ›  技术社区  ›  meshachviktor

如何使用日历[]数组在wdullaer材质日期时间选取器的setDisabledDays(日历[]天)中设置要禁用的天数

  •  0
  • meshachviktor  · 技术社区  · 6 年前

    我正在尝试禁用某些天使用 setDisabledDays(Calendar[] days) wdullaer的material datetime picker的方法,Android的替代datetime picker。

    但我不知道如何使用 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 回复  |  直到 6 年前
        1
  •  0
  •   pandd    6 年前

    要创建 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,等等),所以最好使用常量,例如 Calendar.MARCH ,以避免任何“逐个关闭”错误。

    此类是可变的,因此始终使用 getInstance() 将其分配给阵列之前。

    三百一十个后端口

    如评论中所述,您可以使用 this library -更好、更兼容 java.time API(这将使将来的迁移更加容易,因为 Java语言时间 类在较新的Android API级别中可用)。请参阅如何安装/配置此库 here

    使用此库,创建特定日期更加容易:

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

    或者,要获取当前日期:

    LocalDate date = LocalDate.now();
    

    然后,转换为 日历 ,必须将其设置为时区,然后转换:

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

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

    这就是为什么上面的转换代码看起来如此混乱的原因,但一旦你明白了,它就变得比使用 日历