【问题标题】:How to Get first date and last date from given month in java? [duplicate]如何在java中获取给定月份的第一个日期和最后一个日期? [复制]
【发布时间】:2020-06-04 15:15:34
【问题描述】:

我们将以 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());

【问题讨论】:

  • 您是指日期而不是日期吗?因为每个月的第一个日期是 1,最后一个日期是 31、30 或 28。
  • 更喜欢使用 java.util.time 类。 YearMonth 类提供了一个简单的 atEndOfMonth() 方法。至于这个月的第一个日期,它是第 1 天。只需使用 atDay(1)
  • @kumesana 没有 java.util.time 这样的东西。我想你的意思是 java.time。

标签: java java.util.date java.util.calendar


【解决方案1】:

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

你现在可以这样做了:

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;
}

【讨论】:

  • ... 或者,例如,使用 YearMonth
  • 是的,刚刚知道。谢谢你。我更新了我的答案。
【解决方案2】:

试试这个,你可以简单地用 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()));

【讨论】:

    【解决方案3】:

    您可以使用 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
    

    您可以关注以下doc 这是了解更多信息的良好开端

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2012-05-29
      • 2016-10-10
      • 1970-01-01
      • 2018-03-13
      • 2012-05-25
      相关资源
      最近更新 更多