如何获取Calendar类型的当前时间后一个月日期?适配日期选择器
解决Calendar类型获取当前时间后一个月的问题
嗨,这个问题我开发时也踩过类似的坑!核心问题是**Calendar.add()方法的返回值是Unit(Java中是void)**——它是直接修改调用它的Calendar实例本身,而不是返回一个新的Calendar对象,所以你没法把它的结果赋值给变量。
下面给你Kotlin和Java两种正确的实现方式:
Kotlin 实现
我们需要先创建当前Calendar的副本,再对副本进行月份增加操作,避免修改原有的当前时间实例:
val now = Calendar.getInstance() // 创建新的Calendar实例并复制当前时间,再增加一个月 val oneMonthFromNow = Calendar.getInstance().apply { time = now.time add(Calendar.MONTH, 1) } // 直接将这个Calendar对象用于日期选择器的最大日期设置 datePickerDialog.maxDate = oneMonthFromNow.timeInMillis
Java 实现
Java里可以通过clone()方法复制原Calendar实例,再对副本进行操作:
Calendar now = Calendar.getInstance(); // 复制当前Calendar实例,避免修改原对象 Calendar oneMonthFromNow = (Calendar) now.clone(); oneMonthFromNow.add(Calendar.MONTH, 1); // 设置日期选择器的最大日期 datePickerDialog.setMaxDate(oneMonthFromNow.getTimeInMillis());
小提示:如果你后续不需要用到原始的当前时间实例,也可以直接对now调用add()方法后使用,但为了代码的可维护性和避免意外修改,复制实例的做法更稳妥哦。
内容的提问来源于stack exchange,提问作者Agung
相关产品推荐
相关产品推荐

