我們可能要將日期和時間調(diào)整為該月的第一個星期一或下一個星期二。
我們可以使用 TemporalAdjuster
界面來調(diào)整日期和時間。接口有一個方法, adjustInto()
,它接受一個時間并返回一個時間。
TemporalAdjusters
類包含返回不同類型的預(yù)定義日期調(diào)整器的靜態(tài)方法。
以下代碼顯示了如何計(jì)算2014年1月1日之后的第一個星期一:
import java.time.DayOfWeek; import java.time.LocalDate; import java.time.Month; import java.time.temporal.TemporalAdjusters; public class Main { public static void main(String[] args) { LocalDate ld1 = LocalDate.of(2014, Month.JANUARY, 1); LocalDate ld2 = ld1.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); System.out.println(ld1); System.out.println(ld2); } }
上面的代碼生成以下結(jié)果。
TemporalAdjusters定義了一些可用于調(diào)整日期的有用方法。
next(DayOfWeek dayOfWeek)
nextOrSame(DayOfWeek dayOfWeek)
previous(DayOfWeek dayOfWeek)
previousOrSame(DayOfWeek dayOfWeek)
firstInMonth(DayOfWeek dayOfWeek)
lastInMonth(DayOfWeek dayOfWeek)
dayOfWeekInMonth(int ordinal, DayOfWeek dayOfWeek)
firstDayOfMonth()
lastDayOfMonth()
firstDayOfYear()
lastDayOfYear()
firstDayOfNextMonth()
firstDayOfNextYear()
ofDateAdjuster(UnaryOperator<LocalDate> dateBasedAdjuster)
以下代碼顯示了如何使用 dayOfWeekInMonth
。
import java.time.DayOfWeek; import java.time.LocalDate; import java.time.Month; import java.time.temporal.TemporalAdjusters; public class Main { public static void main(String[] args) { LocalDate ld1 = LocalDate.of(2014, Month.MAY, 21); System.out.println(ld1); LocalDate ld2 = ld1.with(TemporalAdjusters.dayOfWeekInMonth(5, DayOfWeek.SUNDAY)); System.out.println(ld2); } }
上面的代碼生成以下結(jié)果。
您可以使用ofDateAdjuster()方法為LocalDate創(chuàng)建自己的日期調(diào)整器。
以下代碼創(chuàng)建日期調(diào)整程序。
import java.time.LocalDate; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; public class Main { public static void main(String[] args) { // Create an adjuster that retruns a date after 3 months and 2 days TemporalAdjuster adjuster = TemporalAdjusters .ofDateAdjuster((LocalDate date) -> date.plusMonths(3).plusDays(2)); LocalDate today = LocalDate.now(); LocalDate dayAfter3Mon2Day = today.with(adjuster); System.out.println("Today: " + today); System.out.println("After 3 months and 2 days: " + dayAfter3Mon2Day); } }
上面的代碼生成以下結(jié)果。
更多建議: