В Java 8 вы можете использовать предопределенный java.time.temporal. Временные настройки для корректировки даты или Временной
1. Временные регуляторы
Пример переноса даты на первый день месяца, первый день следующего месяца, следующий понедельник и т. Д.
package com.mkyong.time;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class TestDate {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
System.out.println("current date : " + localDate);
LocalDate with = localDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("firstDayOfMonth : " + with);
LocalDate with1 = localDate.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfMonth : " + with1);
LocalDate with2 = localDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
System.out.println("next monday : " + with2);
LocalDate with3 = localDate.with(TemporalAdjusters.firstDayOfNextMonth());
System.out.println("firstDayOfNextMonth : " + with3);
}
}
Выход
current date : 2016-11-15 firstDayOfMonth : 2016-11-01 lastDayOfMonth : 2016-11-30 next monday : 2016-11-21 firstDayOfNextMonth : 2016-12-01
2. Пользовательский временный регулятор
Пример для реализации TemporalAdjuster чтобы перенести дату на следующее Рождество.
package com.mkyong.time;
import java.time.temporal.ChronoField;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;
public class NextChristmas implements TemporalAdjuster {
@Override
public Temporal adjustInto(Temporal temporal) {
return temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25);
}
}
package com.mkyong.time;
import java.time.LocalDate;
public class TestDate {
public static void main(String[] args) {
LocalDate localDate = LocalDate.now();
System.out.println("current date : " + localDate);
localDate = localDate.with(new NextChristmas());
System.out.println("Next Christmas : " + localDate);
}
}
Выход
current date : 2016-11-15 Next Christmas : 2016-12-25
В качестве альтернативы вы можете использовать следующее лямбда-выражение:
localDate = localDate.with( temporal -> temporal.with(ChronoField.MONTH_OF_YEAR, 12).with(ChronoField.DAY_OF_MONTH, 25) );
Рекомендации
- Java 8 – ХиджраХдат, Как рассчитать дату Рамадана
- Временная настройка javadoc
- Временные настройщики javadoc
- Временной JavaDoc
- Википедия Рождество
Оригинал: “https://mkyong.com/java8/java-8-temporaladjusters-examples/”