This example is a custom TemporalQuery that will determine if a date is a market day based on the New York Stock Exchange trading hours . Implementing the TemporalQuery interface with the queryFrom(TemporalAccessor) method allows for a way to extract information from a temporal object. The queryFrom method compares the passed-in date against a list of observed holidays returning true if a match, otherwise false. Please note, this was strictly an example and you will want to verify the rules to determine market day rules are correct for your business.
Setup 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 );
}
}
Validate market day @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 );
}
Number of market days in year @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 );
}
Market day query posted by Justin Musgrove on 07 February 2014
Tagged: java, java-date, and java-date-query
Share on: Facebook Google+
All the code on this page is available on github:
MarketDayQuery.java