Ejemplo n.º 1
0
    def __generate_holidays(cls, year):
        
        empty = Calendar()
        
        # New Year's Day
        yield empty.adjust(date(year, 1, 1), BusinessDayConvention.following)
        
        if year >= 2000:
            # Good Friday and Easter Monday
            easter_monday = empty.easter(year);
            yield easter_monday + timedelta(-3)
            yield easter_monday
            
        if year >= 2000:
            # Labour Day
            yield date(year, 5, 1)

        # Christmas
        yield date(year, 12, 25)

        if year >= 2000:
            # Day of Goodwill
            yield date(year, 12, 26)

        if year == 1998 or year == 1999 or year == 2001:
            yield date(year, 12, 31)
Ejemplo n.º 2
0
 def test_is_leap_year(self):
     self.assertTrue(Calendar.is_leap_year(2008), "Is a leap year.")
     self.assertFalse(Calendar.is_leap_year(2009), "Isn't a leap year.")
     self.assertFalse(Calendar.is_leap_year(2010), "Isn't a leap year.")
     self.assertFalse(Calendar.is_leap_year(2011), "Isn't a leap year.")
     self.assertTrue(Calendar.is_leap_year(2012), "Is a leap year.")
     self.assertFalse(Calendar.is_leap_year(2013), "Isn't a leap year.")
     self.assertFalse(Calendar.is_leap_year(2014), "Isn't a leap year.")
     self.assertFalse(Calendar.is_leap_year(2015), "Isn't a leap year.")
     self.assertTrue(Calendar.is_leap_year(2016), "Is a leap year.")
     self.assertFalse(Calendar.is_leap_year(2100), "Isn't a leap year.")
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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..")
Ejemplo n.º 5
0
    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))
Ejemplo n.º 6
0
 def test_easter(self):
     self.assertEquals(date(2001, 4, 15), Calendar.easter(2001), "Easter 2001")
     self.assertEquals(date(2002, 3, 31), Calendar.easter(2002), "Easter 2002")
     self.assertEquals(date(2003, 4, 20), Calendar.easter(2003), "Easter 2003")
     self.assertEquals(date(2004, 4, 11), Calendar.easter(2004), "Easter 2004")
     self.assertEquals(date(2005, 3, 27), Calendar.easter(2005), "Easter 2005")
     self.assertEquals(date(2006, 4, 16), Calendar.easter(2006), "Easter 2006")
     self.assertEquals(date(2007, 4, 8), Calendar.easter(2007), "Easter 2007")
     self.assertEquals(date(2008, 3, 23), Calendar.easter(2008), "Easter 2008")
     self.assertEquals(date(2009, 4, 12), Calendar.easter(2009), "Easter 2009")
     self.assertEquals(date(2010, 4, 4), Calendar.easter(2010), "Easter 2010")
     self.assertEquals(date(2011, 4, 24), Calendar.easter(2011), "Easter 2011")
     self.assertEquals(date(2012, 4, 8), Calendar.easter(2012), "Easter 2012")
     self.assertEquals(date(2013, 3, 31), Calendar.easter(2013), "Easter 2013")
     self.assertEquals(date(2014, 4, 20), Calendar.easter(2014), "Easter 2014")
     self.assertEquals(date(2015, 4, 5), Calendar.easter(2015), "Easter 2015")
     self.assertEquals(date(2016, 3, 27), Calendar.easter(2016), "Easter 2016")
     self.assertEquals(date(2017, 4, 16), Calendar.easter(2017), "Easter 2017")
     self.assertEquals(date(2018, 4, 1), Calendar.easter(2018), "Easter 2018")
     self.assertEquals(date(2019, 4, 21), Calendar.easter(2019), "Easter 2019")
     self.assertEquals(date(2020, 4, 12), Calendar.easter(2020), "Easter 2020")
     self.assertEquals(date(2021, 4, 4), Calendar.easter(2021), "Easter 2021")
Ejemplo n.º 7
0
 def test_add_months(self):
     # Forward
     self.assertEqual(date(2013, 2, 28), Calendar.add_months(date(2012, 11, 30), 3), "Should not roll into March.")
     self.assertEqual(date(2013, 4, 28), Calendar.add_months(date(2013, 2, 28), 2, False), "Should not go to end of month.")
     self.assertEqual(date(2013, 4, 30), Calendar.add_months(date(2013, 2, 28), 2, True), "Should go to end of month.")
     self.assertEqual(date(2013, 1, 30), Calendar.add_months(date(2012, 11, 30), 2, False), "Should not go to end of month.")
     self.assertEqual(date(2013, 1, 31), Calendar.add_months(date(2012, 11, 30), 2, True), "Should go to end of month.")
     # Back
     self.assertEqual(date(2012, 11, 28), Calendar.add_months(date(2013, 2, 28), -3, False), "Should not roll into March.")
     self.assertEqual(date(2012, 11, 30), Calendar.add_months(date(2013, 2, 28), -3, True), "Should go to end of month.")
     self.assertEqual(date(2013, 1, 28), Calendar.add_months(date(2013, 4, 28), -3, True), "Should not go to end of month.")
     self.assertEqual(date(2012, 1, 28), Calendar.add_months(date(2013, 4, 28), -15, True), "Should not go to end of month.")
     self.assertEqual(date(2013, 4, 30), Calendar.add_months(date(2013, 5, 31), -1, True), "Should not stay in May.")
     self.assertEqual(date(2013, 4, 30), Calendar.add_months(date(2013, 5, 31), -1, False), "Should not stay in May.")
Ejemplo n.º 8
0
 def test_is_end_of_month(self):
     self.assertFalse(Calendar.is_end_of_month(date(2008, 1, 30)), "30 January is not the end of the month.")
     self.assertTrue(Calendar.is_end_of_month(date(2008, 1, 31)), "31 January is the end of the month.")
     self.assertFalse(Calendar.is_end_of_month(date(2008, 2, 28)), "28 February 2008 is not the end of the month because it's a leap year.")
     self.assertTrue(Calendar.is_end_of_month(date(2008, 2, 29)), "28 February 2008 is the end of the month because it's a leap year.")
     self.assertTrue(Calendar.is_end_of_month(date(2009, 2, 28)), "28 February 2009 is the end of the month because it's a not leap year.")
Ejemplo n.º 9
0
 def test_is_weekend(self):
     self.assertFalse(Calendar.is_weekend(date(2014, 12, 19)), "19 December 2014 was a Friday.")
     self.assertTrue(Calendar.is_weekend(date(2014, 12, 20)), "20 December 2014 was a Saturday.")
     self.assertTrue(Calendar.is_weekend(date(2014, 12, 21)), "21 December 2014 was a Sunday.")
     self.assertFalse(Calendar.is_weekend(date(2014, 12, 22)), "22 December 2014 was a Monday.")
Ejemplo n.º 10
0
 def test_days_in_month(self):
     self.assertEqual(31, Calendar.days_in_month(2009, 1), "There are 28 days in January.")
     self.assertEqual(28, Calendar.days_in_month(2009, 2), "There are 28 days in February in a non leap year.")
     self.assertEqual(31, Calendar.days_in_month(2009, 3), "There are 28 days in March.")
     self.assertEqual(30, Calendar.days_in_month(2009, 4), "There are 28 days in April.")
     self.assertEqual(31, Calendar.days_in_month(2009, 5), "There are 28 days in May.")
     self.assertEqual(30, Calendar.days_in_month(2009, 6), "There are 28 days in June.")
     self.assertEqual(31, Calendar.days_in_month(2009, 7), "There are 28 days in July.")
     self.assertEqual(31, Calendar.days_in_month(2009, 8), "There are 28 days in August.")
     self.assertEqual(30, Calendar.days_in_month(2009, 9), "There are 30 days in September.")
     self.assertEqual(31, Calendar.days_in_month(2009, 10), "There are 28 days in October.")
     self.assertEqual(30, Calendar.days_in_month(2009, 11), "There are 28 days in November.")
     self.assertEqual(31, Calendar.days_in_month(2009, 12), "There are 28 days in December.")
     self.assertEqual(29, Calendar.days_in_month(2008, 2), "There are 29 days in February in a leap year.")
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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))
        
        # 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)
        
        # Good Friday
        yield empty.easter(year) - timedelta(3)

        # 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))