M06*_*06H 3 java date java-time localdate
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);
}
Run Code Online (Sandbox Code Playgroud)
以上是本月的最后一个工作日.如何Previous调整上述工作日的最后一个工作日?
小智 6
另一种方法是使用a 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));
}
Run Code Online (Sandbox Code Playgroud)
今日运行这段代码(10月2日次 2017年),它给了lastDayPreviousMonth等于2017-09-29.
PS:你minusMonths在LocalDate实例中使用,它不会总是像你想要的那样工作.例如,如果我在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
Run Code Online (Sandbox Code Playgroud)
2017年2月的最后一天是28 日,当minusMonths(1)您打电话时,您会在上个月(1月)的同一天(第 28天)获得,这不是您想要的(2017年1月的最后一个工作日是31 日).
使用YearMonth避免这个,因为这个类只处理月份和年份,忽略了一天(所以minusMonths不会受到这样的影响).因此,您可以轻松地转到所需的月份,然后您可以使用该atEndOfMonth()方法正确地获取最后一天.
有时,简单的方法比聪明的方法更好:
LocalDate lastWorkingDayOfMonth = LocalDate.now().withDayOfMonth(1);
do {
lastWorkingDayOfMonth = lastWorkingDayOfMonth.minusDays(1);
} while (lastWorkingDayOfMonth.getDayOfWeek() == DayOfWeek.SATURDAY ||
lastWorkingDayOfMonth.getDayOfWeek() == DayOfWeek.SUNDAY);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3052 次 |
| 最近记录: |