这篇教程主要是让大家了解下Java 8的时间及日期API中新引入的时间调节器(TemporalAdjuster)。在前一篇教程中我们已经对这套新的API以及TemporalAdjuster的用法作了一个简单的介绍。
在这篇教程中,我们来看下如何通过TemporalAdjuster来查找出指定的一年中感恩节是哪天。 - import java.time.DayOfWeek;
- import java.time.LocalDate;
- import java.time.Month;
- import java.time.temporal.Temporal;
- import java.time.temporal.TemporalAdjuster;
- import java.time.temporal.TemporalAdjusters;
- // 在美国,每年11月的第4个星期四是感恩节
- public class ThanksGivingDayTemporalAdjuster implements TemporalAdjuster {
- @Override
- public Temporal adjustInto(Temporal temporalAdjusterInput) {
- LocalDate temporalAdjusterDate = LocalDate.from(temporalAdjusterInput);
- LocalDate firstNovInYear = LocalDate.of(temporalAdjusterDate.getYear(),
- Month.NOVEMBER, 1);
- // adjusting four weeks for Thursday
- LocalDate thanksGivingDay = firstNovInYear
- .with(TemporalAdjusters.nextOrSame(DayOfWeek.THURSDAY))
- .with(TemporalAdjusters.next(DayOfWeek.THURSDAY))
- .with(TemporalAdjusters.next(DayOfWeek.THURSDAY))
- .with(TemporalAdjusters.next(DayOfWeek.THURSDAY));
- return thanksGivingDay;
- }
- public static void main(String... strings) {
- LocalDate currentDate = LocalDate.now();
- ThanksGivingDayTemporalAdjuster thanksGivingDayAdjuster = new ThanksGivingDayTemporalAdjuster();
- LocalDate thanksGivingDay = currentDate.with(thanksGivingDayAdjuster);
- System.out.println("In Year " + currentDate.getYear()
- + ", Thanks Giving Day(US) is on " + thanksGivingDay);
- }
- }
复制代码在美帝,每年11月的第4个星期四是感恩节。上述的TemporalAdjuster首先将月份调整到了11月,然后连续四次将日期调整为下一个星期四。
示例程序输出 - In Year 2014, Thanks Giving Day(US) is on 2014-11-27
复制代码原创文章转载请注明出处:Java 8:如何计算感恩节是哪天
英文原文链接
|