0

我们将以 yyyyMM 格式传递月份信息。从给定的输入中,我将如何获得该月的 FirstDate 和 LastDate?

Input:-202002

OutPut Should be:-

First Date:- 2020-02-01,
Last Date:- 2020-02-29

DateFormat dateFormat = new SimpleDateFormat("yyyyMM");
Date date = new Date();
System.out.println("First Date:- "+dateFormat.format(date));    
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
Date previousmonth = calendar.getTime();
System.out.println("LastDate:-"+dateFormat.format(previousmonth).toString());
4

3 回答 3

2

正如我刚刚了解到的,现在有一些特殊的方法。

你现在可以这样做:

public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMM");
public static final DateTimeFormatter OUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

public static LocalDate[] getFirstAndLastDateOfMonthNew(String yearAndMonth) {
    final LocalDate[] result = new LocalDate[2];
    final YearMonth yearMonth = YearMonth.parse(yearAndMonth, FORMATTER);
    result[0] = yearMonth.atDay(1);
    result[1] = yearMonth.atEndOfMonth();;
    return result;
}

旧的方法是:

只需将其添加01到日期并解析它。加一个月减一天。

public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
public static final DateTimeFormatter OUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

public static LocalDate[] getFirstAndLastDateOfMonth(String yearAndMonth) {
    final LocalDate[] result = new LocalDate[2];
    final LocalDate first = LocalDate.parse(yearAndMonth + "01", FORMATTER);
    final LocalDate last = first.plusMonths(1).minusDays(1);
    result[0] = first;
    result[1] = last;
    return result;
}
于 2020-02-20T10:26:30.713 回答
1

试试这个,你可以简单地用 LocalDate

String date = "202002";

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                .appendPattern("yyyyMM")
                                .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
                                .toFormatter();

LocalDate firstDay = LocalDate.parse(date, formatter);
LocalDate lastDay = firstDay.withDayOfMonth(firstDay.getMonth().length(firstDay.isLeapYear()));
于 2020-02-20T14:59:23.513 回答
0

您可以使用 java 8 功能,例如TemporalAdjusters我认为它可以帮助您解决如下问题

    public static void getFirstDayAndLastDayInMonth(String date){
        LocalDate monthOfYear=LocalDate.parse(new String(date+"01"),DateTimeFormatter.BASIC_ISO_DATE);
        LocalDate firstLocalDate=monthOfYear.with(TemporalAdjusters.firstDayOfMonth());
        System.out.println(firstLocalDate);
        LocalDate lastLocalDate=monthOfYear.with(TemporalAdjusters.lastDayOfMonth());
        System.out.println(lastLocalDate);
    }

输入202002

输出

2020-02-01
2020-02-29

您可以按照以下文档 了解更多信息

于 2020-02-20T11:16:36.913 回答