def __generate_holidays(cls, year): empty = Calendar(); # New Years Days, adjusted to the first non-weekend. yield empty.adjust(date(year, JulianMonth.january, 1), BusinessDayConvention.following) # Good Friday and Easter Monday easter_monday = empty.easter(year) yield easter_monday - timedelta(3) yield easter_monday if year == 2011: # Royal Wedding yield date(2011, JulianMonth.april, 29) # May Day - first Monday in May. yield empty.add_nth_day_of_week(date(year, JulianMonth.may, 1), 1, DayOfWeek.monday, False) if year == 2002: # Golden Jubilee Bank Holiday yield date(2002, JulianMonth.june, 3) # Special Spring Bank Holiday yield date(2002, JulianMonth.june, 4) elif year == 2012: # Diamond Jubilee Bank Holiday yield date(2012, JulianMonth.june, 4) # Special Spring Bank Holiday yield date(2012, JulianMonth.june, 5) else: # Spring Bank Holiday - last Monday in May yield empty.add_nth_day_of_week(empty.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False) # August Bank Holiday - last Monday in August. yield empty.add_nth_day_of_week(empty.end_of_month(year, JulianMonth.august), -1, DayOfWeek.monday, False) # Christmas Day christmas_day = empty.adjust(date(year, JulianMonth.december, 25), BusinessDayConvention.following) yield christmas_day # Boxing Day yield empty.add_business_days(christmas_day, 1) if year == 1999: # Millennium Celebration yield date(1999, JulianMonth.december, 31)
def __generate_holidays(cls, year): empty = Calendar() # New Year's Day (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.january, 1)) # Martin Luther King's birthday (third Monday in January) yield Calendar.add_nth_day_of_week(date(year, JulianMonth.january, 1), 3, DayOfWeek.monday, False) # Washington's birthday (third Monday in February) yield Calendar.add_nth_day_of_week(date(year, JulianMonth.february, 1), 3, DayOfWeek.monday, False) # Memorial Day (last Monday in May) yield Calendar.add_nth_day_of_week(Calendar.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False) # Independence Day (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.july, 4)) # Labor Day (first Monday in September) yield empty.add_nth_day_of_week(date(year, JulianMonth.september, 1), 1, DayOfWeek.monday, False) # Columbus Day (second Monday in October) yield empty.add_nth_day_of_week(date(year, JulianMonth.october, 1), 2, DayOfWeek.monday, False) # Veteran's Day (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.november, 11)) # Thanksgiving Day (fourth Thursday in November) yield empty.add_nth_day_of_week(date(year, JulianMonth.november, 1), 4, DayOfWeek.thursday, False) # Christmas (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.december, 25))
def __generate_holidays(cls, year): empty = Calendar() # New Year's Day (possibly moved to Monday if on Sunday) new_years_day = date(year, JulianMonth.january, 1) yield (new_years_day if new_years_day.weekday() != DayOfWeek.sunday else new_years_day + timedelta(1)) # Memorial Day (last Monday in May) yield Calendar.add_nth_day_of_week(Calendar.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False) # Independence Day (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.july, 4)) # Labor Day (first Monday in September) yield empty.add_nth_day_of_week(date(year, JulianMonth.september, 1), 1, DayOfWeek.monday, False) # Thanksgiving Day (fourth Thursday in November) yield empty.add_nth_day_of_week(date(year, JulianMonth.november, 1), 4, DayOfWeek.thursday, False) # Christmas (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.december, 25))
def test_add_nth_day_of_week(self): # June 2015 # Su Mo Tu We Th Fr Sa # 1 2 3 4 5 6 # 7 8 9 10 11 12 13 # 14 15 16 17 18 19 20 # 21 22 23 24 25 26 27 # 28 29 30 self.assertEqual(date(2015, 6, 1), Calendar.add_nth_day_of_week(date(2015, 6, 1), 1, DayOfWeek.monday, False), "The first Monday is the same date.") self.assertEqual(date(2015, 6, 8), Calendar.add_nth_day_of_week(date(2015, 6, 1), 1, DayOfWeek.monday, True), "When strictly different go to the next week.") self.assertEqual(date(2015, 6, 2), Calendar.add_nth_day_of_week(date(2015, 6, 1), 1, DayOfWeek.tuesday, False), "The first Tuesday is the next date.") self.assertEqual(date(2015, 6, 2), Calendar.add_nth_day_of_week(date(2015, 6, 1), 1, DayOfWeek.tuesday, True), "Strictly different should make no difference.") self.assertEqual(date(2015, 6, 17), Calendar.add_nth_day_of_week(date(2015, 6, 1), 3, DayOfWeek.wednesday, False), "Third Wednesday.") self.assertEqual(date(2015, 6, 30), Calendar.add_nth_day_of_week(date(2015, 6, 30), -1, DayOfWeek.tuesday, False), "The last Tuesday is the same date.") self.assertEqual(date(2015, 6, 23), Calendar.add_nth_day_of_week(date(2015, 6, 30), -1, DayOfWeek.tuesday, True), "Skip the start date as it's a Tuesday.") self.assertEqual(date(2015, 6, 10), Calendar.add_nth_day_of_week(date(2015, 6, 30), -3, DayOfWeek.wednesday, True), "Third Wednesday from the end of the month..")
def __generatte_holidays(cls, year): empty = Calendar() # New Year's Day (possibly moved to Monday if on Sunday) new_years_day = date(year, JulianMonth.january, 1) yield (new_years_day if new_years_day.weekday() != DayOfWeek.sunday else new_years_day + timedelta(1)) # Washington's birthday (third Monday in February) yield empty.add_nth_day_of_week(date(year, JulianMonth.february, 1), 3, DayOfWeek.monday, False) # Good Friday yield empty.easter(year) - timedelta(3) # Memorial Day (last Monday in May) yield empty.add_nth_day_of_week(empty.end_of_month(year, JulianMonth.may), -1, DayOfWeek.monday, False) # Independence Day (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.july, 4)) # Labor Day (first Monday in September) yield empty.add_nth_day_of_week(date(year, JulianMonth.september, 1), 1, DayOfWeek.monday, False) # Thanksgiving Day (fourth Thursday in November) yield empty.add_nth_day_of_week(date(year, JulianMonth.november, 1), 4, DayOfWeek.thursday, False) # Christmas (Monday if Sunday or Friday if Saturday) yield empty.nearest_business_day(date(year, JulianMonth.december, 25)) if year >= 1998: # Martin Luther King's birthday (third Monday in January) yield Calendar.add_nth_day_of_week(date(year, JulianMonth.january, 1), 3, DayOfWeek.monday, False) if year <= 1968 or (year <= 1980 and year % 4 == 0): # Presidential election days yield Calendar.add_nth_day_of_week(date(year, JulianMonth.november, 1), 1, DayOfWeek.tuesday, True) # Special closings if year == 2012: # Hurricane Sandy yield date(2012, JulianMonth.october, 29) yield date(2012, JulianMonth.october, 30) if year == 2007: # President Ford's funeral yield date(2007, JulianMonth.january, 2) if year == 2004: # President Reagan's funeral yield date(2004, JulianMonth.june, 11) if year == 2001: # September 11-14, 2001 yield date(2001, JulianMonth.september, 11) yield date(2001, JulianMonth.september, 12) yield date(2001, JulianMonth.september, 13) yield date(2001, JulianMonth.september, 14) if year == 1994: # President Nixon's funeral yield date(1994, JulianMonth.april, 27) if year == 1985: # Hurricane Gloria yield date(1985, JulianMonth.september, 27) if year == 1977: # 1977 Blackout yield date(1977, JulianMonth.july, 14) if year == 1973: # Funeral of former President Lyndon B. Johnson. yield date(1973, JulianMonth.january, 25) if year == 1972: # Funeral of former President Harry S. Truman yield date(1972, JulianMonth.december, 28) if year == 1969: # National Day of Participation for the lunar exploration. yield date(1969, JulianMonth.july, 21) # Funeral of former President Eisenhower. yield date(1969, JulianMonth.march, 31) # Closed all day - heavy snow. yield date(1969, JulianMonth.february, 10) if year == 1968: # Day after Independence Day. yield date(1968, JulianMonth.july, 5) # June 12-Dec. 31, 1968 # Four day week (closed on Wednesdays) - Paperwork Crisis d = date(1968, JulianMonth.june, 12) while d.year == 1968: yield d d += timedelta(7) # Day of mourning for Martin Luther King Jr. yield date(1968, JulianMonth.april, 9) if year == 1963: # Funeral of President Kennedy yield date(1963, JulianMonth.november, 25) if year == 1961: # Day before Decoration Day yield date(1961, JulianMonth.may, 29) if year == 1958: # Day after Christmas yield date(1958, JulianMonth.december, 26) if year == 1954 or year == 1956 or year == 1965: # Christmas Eve yield date(year, JulianMonth.december, 24)