package com.levelup.java.date.query;
import static org.junit.Assert.assertTrue;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalQuery;
import org.junit.Test;
/**
* This java example will demonstrate determining if the date is within daylight
* saving while using TemporalQuery.
*
* @author Justin Musgrove
* @see <a href=
* 'http://www.leveluplunch.com/java/examples/daylight-saving-query-java8/'>Daylight
* saving query</a>
*/
public class DaylightSavingQuery implements TemporalQuery<Boolean> {
/*
* (non-Javadoc)
*
* @see java.time.temporal.TemporalQuery#queryFrom(java.time.temporal.
* TemporalAccessor)
*/
@Override
public Boolean queryFrom(TemporalAccessor temporal) {
LocalDate date = LocalDate.from(temporal);
LocalDate secondSundayInMarch = LocalDate.from(date)
.withMonth(Month.MARCH.getValue())
.with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY))
.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
LocalDate firstSundayInNovember = LocalDate.from(date)
.withMonth(Month.NOVEMBER.getValue())
.with(TemporalAdjusters.firstDayOfMonth())
.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
if (date.isAfter(secondSundayInMarch)
|| date.isBefore(firstSundayInNovember)) {
return true;
} else {
return false;
}
}
@Test
public void during_daylight_savings() {
LocalDate date = LocalDate.of(2014, Month.JULY, 02);
Boolean daylightSavings = date.query(new DaylightSavingQuery());
assertTrue(daylightSavings);
}
@Test
public void not_during_daylight_savings() {
LocalDate date = LocalDate.of(2014, Month.DECEMBER, 02);
Boolean daylightSavings = date.query(new DaylightSavingQuery());
assertTrue(daylightSavings);
}
}