/* * [SweaterDay.java] * * Summary: calculate when Sweater day occurs. * * Copyright: (c) 2014-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2014-04-16 initial version */ package com.mindprod.holidays; import com.mindprod.common18.BigDate; /** * calculate when Sweater day occurs. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2014-04-16 initial version * @since 2014-04-16 */ public final class SweaterDay extends HolInfo { /** * @inheritDoc */ public String getAuthority() { return "http://www.wwf.ca/events/sweater_day/"; } /** * @inheritDoc */ public int getFirstYear( int base ) { return 2011; } /** * @inheritDoc */ public String getName() { return "Sweater Day"; } /** * @inheritDoc */ public String getRule() { return "Thursday near Feb 7."; } /** * @inheritDoc */ public int when( int year, boolean shift, int base ) { if ( !isYearValid( year, base ) ) { return BigDate.NULL_ORDINAL; } final int firstThursday = BigDate.ordinalOfnthXXXDay( 1, BigDate.THURSDAY, year, BigDate.FEB ); final BigDate seventh = new BigDate( year, 2, 7 ); final int secondThursday = BigDate.ordinalOfnthXXXDay( 2, BigDate.THURSDAY, year, BigDate.FEB ); final int close = seventh.getOrdinal() - firstThursday; return shiftSatToFriSunToMon( close > 3 ? secondThursday : firstThursday, shift ); } // end when. }