java - 日历 - 获取上个月的最后一天

标签 java android

我想获取上个月的最后一天。 但这似乎不起作用:

Calendar cal = Calendar.getInstance();
Integer lastDay = cal.getInstance().getActualMaximum(cal.DAY_OF_MONTH);

cal.add(Calendar.MONTH, -1);

Integer prevMonth = cal.get(Calendar.MONTH);
Integer prevMonthYear = cal.get(Calendar.YEAR);
Integer lastDayPrevMonth = cal.getInstance().getActualMaximum(cal.DAY_OF_MONTH);

System.out.println("Previous month was: " + prevMonth + "-" + prevMonthYear);
System.out.println("Last day in previous month was: " + lastDayPrevMonth);
System.out.println("Last day in this month is: " + lastDay);

这个输出:

I/System.out﹕: Previous month was 10-2015
I/System.out﹕: Last day in previous month was 31
I/System.out﹕: Last day in this month is 31

现在是上个月,即 11 月 (10) 日,现在是 12 月 (11) 日。 这个月的最后一天也是正确的,但显然,上个月的最后一天不是31,而是30。

当我执行 add -1 操作时,为什么第二个 getActualMaximum 给出与第一个相同的“月末最后一天”?

最佳答案

当前代码中的问题是您多次调用返回当前日期的 Calendar.getInstance() 方法。

要获取上个月最后一天的 Calendar,您可以执行以下操作:

public static void main(String... args) {
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MONTH, -1);
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));

    System.out.println(cal.get(Calendar.MONTH));
    System.out.println(cal.get(Calendar.DAY_OF_MONTH));
}

它从当前月份减去一个月,并将月份中的第几天设置为其最大值,通过 getActualMaximum 获得.请注意,月份在 Calendar 中是从 0 开始的,因此一月实际上是 0。

关于java - 日历 - 获取上个月的最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076518/

相关文章:

java - 什么是绘画和重绘功能的替代方案?

java - Spring Security基于XML的配置: java. lang.IllegalArgumentException:没有为id "null"映射的PasswordEncoder

java - OSGI:是否可以在不激活 bundle 的情况下导入包?

android - 如果我在不增加版本代码的情况下在 Google Play 上发布更新,新版本是否可用于新安装?

android - 完全禁用 AndEngine Box2D 中的物体碰撞

安卓DIP大小错误

java - Java 中的递归和垃圾清理

java - Android/Java 问题 : Seeking help in understanding a line of code from NotesList example

java - 具有屏幕旋转的 AsyncTask - onRetainNonConfigurationInstance 已弃用

java - 在数据库中存储特殊字符