package com.levelup.java.date.query; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.time.LocalDate; import java.time.Month; import java.time.MonthDay; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalQuery; import java.util.List; import org.junit.Test; import com.google.common.collect.Lists; /** * This java example will demonstrate how to * determine if a date is a market day. * * @author Justin Musgrove * @see <a href='http://www.leveluplunch.com/java/examples/market-day-temporal-query-java8/'>Market day query</a> */ public class MarketDayQuery implements TemporalQuery<Boolean> { static List<MonthDay> nyxHolidays = Lists.newArrayList( MonthDay.of(Month.JANUARY, 1), // New Years Day January 1 MonthDay.of(Month.JANUARY, 20), // Martin Luther King, Jr. Day January 20 MonthDay.of(Month.FEBRUARY, 17), // Washington's Birthday February 17 MonthDay.of(Month.APRIL, 18), // Good Friday April 18 MonthDay.of(Month.MAY, 26), // Memorial Day May 26 MonthDay.of(Month.JULY, 4), // Independence Day July 4** MonthDay.of(Month.SEPTEMBER, 1), // Labor Day September 1 MonthDay.of(Month.NOVEMBER, 27), // Thanksgiving Day November 27* MonthDay.of(Month.DECEMBER, 25) // Christmas December 25*** ); /* (non-Javadoc) * @see java.time.temporal.TemporalQuery#queryFrom(java.time.temporal.TemporalAccessor) */ @Override public Boolean queryFrom(TemporalAccessor date) { MonthDay currentMonthDay = MonthDay.from(date); return !nyxHolidays.contains(currentMonthDay); } @Test public void check_if_random_date_is_market_day() { LocalDate date = LocalDate.of(2014, 02, 02); // Sunday Boolean marketDay = date.query(new MarketDayQuery()); assertTrue(marketDay); } @Test public void number_of_market_days_in_year () { int totalMarketDays = 0; for (LocalDate date = MonthDay.of(Month.JANUARY, 1).atYear(2014); date.isBefore(MonthDay.of(Month.DECEMBER, 31).atYear(2014)); date = date.plusDays(1)) { boolean isMarketDay = date.query(new MarketDayQuery()); if (isMarketDay) { totalMarketDays += 1; } } assertEquals(355, totalMarketDays); } }