使用threeten,LocalDate获取每月的第一天和最后一天

use*_*050 99 java date java-time

我有一个LocalDate需要获得该月的第一天和最后一天.我怎么做?

例如.13/2/2014我需要以LocalDate格式获得1/2/2014和28/2/2014.

使用threeten LocalDate类.

Jon*_*eet 151

只需使用withDayOfMonth,并lengthOfMonth():

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.withDayOfMonth(initial.lengthOfMonth());
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,看看其他答案 (6认同)

Jod*_*hen 134

API旨在支持与业务需求紧密匹配的解决方案

import static java.time.temporal.TemporalAdjusters.*;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.with(firstDayOfMonth());
LocalDate end = initial.with(lastDayOfMonth());
Run Code Online (Sandbox Code Playgroud)

但是,Jon的解决方案也很好.

  • 接下来,使用专门用于解决此特定问题的API资源。 (2认同)

her*_*man 52

YearMonth

为了完整性,在我看来更优雅,请看这个YearMonth类的使用.

YearMonth month = YearMonth.from(date);
LocalDate start = month.atDay(1);
LocalDate end   = month.atEndOfMonth();
Run Code Online (Sandbox Code Playgroud)

  • 最好的解决方案. (7认同)

Men*_*ild 16

Jon Skeets的答案是正确的,并且值得我的upvote,只需添加这个略有不同的完整性解决方案:

import static java.time.temporal.TemporalAdjusters.lastDayOfMonth;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.with(lastDayOfMonth());
Run Code Online (Sandbox Code Playgroud)

  • 亲爱的唐纳德,老实说,我不理解唐纳德的投票,因为我的回答甚至比乔达·斯蒂芬(JodaStephen)早一天,并且指出了主要有趣的新部分,即月底的时间调整器。那就是我还没有“复制”别人的答案。 (2认同)

Vio*_*lea 7

LocalDate endDate = startDate.withDayOfMonth(1).plusMonths(1).minusDays(1);
Run Code Online (Sandbox Code Playgroud)

或者

    LocalDate startDate = LocalDate.now();
    System.out.println("startDate: "+startDate);
    
    LocalDate firstDayOfMonth_of_startDate = startDate.withDayOfMonth(1); 
    System.out.println("firstDayOfMonth_of_startDate: "+firstDayOfMonth_of_startDate);
    
    LocalDate firstDayOfNextMonth_of_startDate = firstDayOfMonth_of_startDate.plusMonths(1); 
    System.out.println("firstDayOfNextMonth_of_startDate: "+firstDayOfNextMonth_of_startDate);
    
    LocalDate lastDayOfTheMonth_of_startDate = firstDayOfNextMonth_of_startDate.minusDays(1); 
    System.out.println("lastDayOfTheMonth_of_startDate: "+lastDayOfTheMonth_of_startDate);

    // or everything in one line
    LocalDate endDate = startDate.withDayOfMonth(1).plusMonths(1).minusDays(1);
    System.out.println("endDate: "+endDate);
Run Code Online (Sandbox Code Playgroud)

和打印输出

startDate: 2021-11-05
firstDayOfMonth_of_startDate: 2021-11-01
firstDayOfNextMonth_of_startDate: 2021-12-01
lastDayOfTheMonth_of_startDate: 2021-11-30
endDate: 2021-11-30
Run Code Online (Sandbox Code Playgroud)


小智 6

 LocalDate monthstart = LocalDate.of(year,month,1);
 LocalDate monthend = monthstart.plusDays(monthstart.lengthOfMonth()-1);
Run Code Online (Sandbox Code Playgroud)


Ani*_*kar 5

如果有人来寻找前一个月的第一天,上月的最后一天

public static LocalDate firstDayOfPreviousMonth(LocalDate date) {
        return date.minusMonths(1).withDayOfMonth(1);
    }


public static LocalDate lastDayOfPreviousMonth(LocalDate date) {
        return date.withDayOfMonth(1).minusDays(1);
    }
Run Code Online (Sandbox Code Playgroud)