我想检索上个月的天数。我可以通过
获取当月的天数 Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
int currentMonthDaysCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(currentMonthDaysCount);
所以,我尝试将上个月的天数计算为
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH - 1), 1);
int previousMonthDaysCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(previousMonthDaysCount);
我的控制台上出现了
30
。我有什么错吗?这个月是八月,上个月七月应该会产生31
。
您是从
Calendar
常数中减去,而不是从该常数得到的值中减去。
改变:
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH - 1), 1);
与:
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) - 1, 1);
更简单的解决方案:
calendar.roll(Calendar.MONTH, false);
...将“向下”“滚动”一个月。
java.time.YearMonth
避免存在严重缺陷的遗留日期时间类。切勿使用
Calendar
、Date
、DateFormat
等。仅使用 java.time 类。
要表示特定年份的特定月份,请使用
YearMonth
类。