gpt4 book ai didi

java - LocalDate 上个月的最后一个工作日

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:23 26 4
gpt4 key购买 nike

public static String getLastWorkingDayOfPreviousMonth() {

LocalDate lastDayOfCurrentMonth = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
LocalDate lastWorkingDayOfMonth;

switch (DayOfWeek.of(lastDayOfCurrentMonth.get(ChronoField.DAY_OF_WEEK))) {
case SATURDAY:
lastWorkingDayOfMonth = lastDayOfCurrentMonth.minusMonths(1);
break;
case SUNDAY:
lastWorkingDayOfMonth = lastDayOfCurrentMonth.minusMonths(2);
break;
default:
lastWorkingDayOfMonth = lastDayOfCurrentMonth;
}

return getFormattedDate(lastWorkingDayOfMonth);
}

以上给出了当月的最后一个工作日。如何获得调整上述内容的 Previous 月份的最后一个工作日?

最佳答案

另一种方法是使用 java.time.YearMonth 获取前一个月。然后你得到这个月的最后一天,如果是周末,则调整到上周五:

LocalDate lastDayPreviousMonth = YearMonth
// current year/month
.now()
// previous month
.minusMonths(1)
// last day of month
.atEndOfMonth();
DayOfWeek dayOfWeek = lastDayPreviousMonth.getDayOfWeek();
// check if it's weekend
if (dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY) {
// adjust to previous friday
lastDayPreviousMonth = lastDayPreviousMonth.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
}

今天(2017 年 10 月 2 日nd)运行此代码,它给出 lastDayPreviousMonth 等于 2017-09-29


PS:您在 LocalDate 实例中使用了 minusMonths,它不会总是如您所愿地工作。例如,如果我在 2017 年 2 月有一个约会:

// Feb 15th 2017
LocalDate d = LocalDate.of(2017, 2, 15);
// adjust to last day of month (2017-02-28)
d = d.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(d.minusMonths(1)); // 2017-01-28

2017 年 2 月的最后一天是 28th,当调用 minusMonths(1) 时,您会得到同一天(28th ) 在上个月(1 月),这不是您想要的(2017 年 1 月的最后一个工作日是 31st)。

使用 YearMonth 可以避免这种情况,因为此类仅处理月份和年份,而忽略了日期(因此 minusMonths 不会受到此类影响)。因此您可以轻松转到所需的月份,然后您可以使用 atEndOfMonth() 方法正确获取最后一天。

关于java - LocalDate 上个月的最后一个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46528017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com