Java 以 MM/dd/yyyy 格式获取下个月的 FirstDate 和 LastDate,即使输入不是该月的第一天
Java get FirstDate and LastDate of following month in MM/dd/yyyy format even if the input is not the first day of the month
我下面有一个函数,它有一个输入 Date,它将 return 第一个和最后一个 Date下个月 MM/dd/yyyy
格式。
String string = "01/01/2022";
DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date dt = sdf .parse(string);
Calendar c = Calendar.getInstance();
c.setTime(dt);
c.add(Calendar.MONTH, 1);
String firstDate = sdf.format(c.getTime());
System.out.println("FirstDate:" + firstDate);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -1);
String lastDate = sdf.format(c.getTime());
System.out.println("LastDate:" + lastDate);
以上将给我如下输出
FirstDate:02/01/2022
LastDate:02/28/2022
如果输入是上个月的第一天,这很有效,我想要实现的是获得下一个 month
的 FirstDate 和 LastDate,即使输入的日期是不是月份的第一个日期,例如 01/31/2022
给我下面的输出
FirstDate:02/28/2022
LastDate:03/27/2022
但我还是希望它能给我第一个出
FirstDate:02/01/2022
LastDate:02/28/2022
你可以在 Java 中更轻松地做到这一点 8. 使用 java.time.YearMonth
,用它的方法 now()
获取当前的,并导出第一个和最后一个 LocalDate
它:
public static void main(String[] args) {
// get the current month
YearMonth currentMonth = YearMonth.now();
// get the date with day of month = 1 using the current month
LocalDate firstOfMonth = currentMonth.atDay(1);
// then get its last date (no number required here)
LocalDate lastOfMonth = currentMonth.atEndOfMonth();
// prepare a formatter for your desired output (default: uuuu-MM-dd)
DateTimeFormatter customDtf = DateTimeFormatter.ofPattern("MM/dd/uuuu");
// print the month and year without a formatter (just for visualization)
System.out.println("Month: " + currentMonth);
// then print both desired dates using the custom formatter
System.out.println("FirstDate: " + firstOfMonth.format(customDtf));
System.out.println("LastDate: " + lastOfMonth.format(customDtf));
}
这会打印
Month: 2022-05
FirstDate: 05/01/2022
LastDate: 05/31/2022
您当然可以使用任何给定的月份,您可以使用 YearMonth.of(int year, int month)
来创建您的示例值:
YearMonth currentMonth = YearMonth.of(2022, 2);
不要使用日期,因为它已过时且存在错误。使用 LocalDate and other classes from the java.time 包。
- 以下先使用现有日期,然后将
1
添加到月份。如果需要,这也会导致年份增加。
- 然后
dayOfMonth
作为 1
或该月的最后一天。自动考虑闰年。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate date = LocalDate.parse("12/22/2020", dtf);
date = date.plusMonths(1);
LocalDate endDate = date.withDayOfMonth(date.lengthOfMonth());
LocalDate startDate = date.withDayOfMonth(1);
System.out.println("FirstDate: " +startDate.format(dtf));
System.out.println("LastDate: " +endDate.format(dtf));
打印
FirstDate: 01/01/2021
LastDate: 01/31/2021
我下面有一个函数,它有一个输入 Date,它将 return 第一个和最后一个 Date下个月 MM/dd/yyyy
格式。
String string = "01/01/2022";
DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date dt = sdf .parse(string);
Calendar c = Calendar.getInstance();
c.setTime(dt);
c.add(Calendar.MONTH, 1);
String firstDate = sdf.format(c.getTime());
System.out.println("FirstDate:" + firstDate);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -1);
String lastDate = sdf.format(c.getTime());
System.out.println("LastDate:" + lastDate);
以上将给我如下输出
FirstDate:02/01/2022
LastDate:02/28/2022
如果输入是上个月的第一天,这很有效,我想要实现的是获得下一个 month
的 FirstDate 和 LastDate,即使输入的日期是不是月份的第一个日期,例如 01/31/2022
给我下面的输出
FirstDate:02/28/2022
LastDate:03/27/2022
但我还是希望它能给我第一个出
FirstDate:02/01/2022
LastDate:02/28/2022
你可以在 Java 中更轻松地做到这一点 8. 使用 java.time.YearMonth
,用它的方法 now()
获取当前的,并导出第一个和最后一个 LocalDate
它:
public static void main(String[] args) {
// get the current month
YearMonth currentMonth = YearMonth.now();
// get the date with day of month = 1 using the current month
LocalDate firstOfMonth = currentMonth.atDay(1);
// then get its last date (no number required here)
LocalDate lastOfMonth = currentMonth.atEndOfMonth();
// prepare a formatter for your desired output (default: uuuu-MM-dd)
DateTimeFormatter customDtf = DateTimeFormatter.ofPattern("MM/dd/uuuu");
// print the month and year without a formatter (just for visualization)
System.out.println("Month: " + currentMonth);
// then print both desired dates using the custom formatter
System.out.println("FirstDate: " + firstOfMonth.format(customDtf));
System.out.println("LastDate: " + lastOfMonth.format(customDtf));
}
这会打印
Month: 2022-05
FirstDate: 05/01/2022
LastDate: 05/31/2022
您当然可以使用任何给定的月份,您可以使用 YearMonth.of(int year, int month)
来创建您的示例值:
YearMonth currentMonth = YearMonth.of(2022, 2);
不要使用日期,因为它已过时且存在错误。使用 LocalDate and other classes from the java.time 包。
- 以下先使用现有日期,然后将
1
添加到月份。如果需要,这也会导致年份增加。 - 然后
dayOfMonth
作为1
或该月的最后一天。自动考虑闰年。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate date = LocalDate.parse("12/22/2020", dtf);
date = date.plusMonths(1);
LocalDate endDate = date.withDayOfMonth(date.lengthOfMonth());
LocalDate startDate = date.withDayOfMonth(1);
System.out.println("FirstDate: " +startDate.format(dtf));
System.out.println("LastDate: " +endDate.format(dtf));
打印
FirstDate: 01/01/2021
LastDate: 01/31/2021