Java 日历中的前一天不正确

Incorrect previous day in Java Calender

我想在 Java 中使用 Calender 获取前一天。我正在使用以下代码。

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
now.add(Calendar.MONTH, -2);

myDate = now.get(Calendar.MONTH) + "/" + now.get(Calendar.DATE) + "/" + now.get(Calendar.YEAR);

System.out.println(myDate);

输出:2/31/2020

上面的问题不是一直有效。如上所述,如果当前日期是 03/01/2020,您将获得上述结果。但是二月不能有31Calendar 库中是否有一个选项来处理这个问题?

如果我在下面使用格式化,它会给出完全不同的值。

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
now.add(Calendar.MONTH, -2);
SimpleDateFormat df = new SimpleDateFormat("MM/DD/YYYY");
String myDate= df.format(now.getTime());

System.out.println(myDate);

输出:03/91/2020

您的日期格式不是您想要的。尝试以下方法获取上一个日期(昨天):

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String MyDate= df.format(now.getTime());

System.out.println(MyDate);

根据 documentation "YYYY" 是周年,"DD" 是年日。

P.S.: 按照惯例,java 中的变量名写成小写。

java.time

请使用 java.time,现代 Java 日期和时间 API,作为您的日期和时间工作。它比旧的、设计糟糕的、过时的日期时间 类 包括 CalendarSimpleDateFormat.

更好用。

并且在需要将日期格式化为字符串时一定要使用格式化程序。

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");

    LocalDate today = LocalDate.now(ZoneId.of("Australia/Melbourne"));
    LocalDate then = today.minusDays(1).minusMonths(2);

    String myDate= then.format(dateFormatter);

    System.out.println(myDate);

2020 年 3 月 2 日今天 运行 时的输出:

01/01/2020

教程 link: Oracle tutorial: Date Time 解释如何使用 java.time.