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
,您将获得上述结果。但是二月不能有31
。 Calendar
库中是否有一个选项来处理这个问题?
如果我在下面使用格式化,它会给出完全不同的值。
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,作为您的日期和时间工作。它比旧的、设计糟糕的、过时的日期时间 类 包括 Calendar
和 SimpleDateFormat
.
更好用。
并且在需要将日期格式化为字符串时一定要使用格式化程序。
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.
我想在 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
,您将获得上述结果。但是二月不能有31
。 Calendar
库中是否有一个选项来处理这个问题?
如果我在下面使用格式化,它会给出完全不同的值。
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,作为您的日期和时间工作。它比旧的、设计糟糕的、过时的日期时间 类 包括 Calendar
和 SimpleDateFormat
.
并且在需要将日期格式化为字符串时一定要使用格式化程序。
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.