Calendars#

The rateslib.calendars module generates holiday calendars so that business days are well defined.

Summary#

Classes#

rateslib.calendars.Cal(holidays, week_mask)

A business day calendar with a singular list of holidays.

rateslib.calendars.NamedCal(name)

A wrapper for a UnionCal struct specified by a string representation.

rateslib.calendars.UnionCal(calendars[, ...])

A business day calendar which is the potential union of multiple calendars, with the additional constraint of also ensuring settlement compliance with one or more other calendars.

Methods#

rateslib.calendars.get_calendar(calendar[, ...])

Returns a calendar object either from an available set or a user defined input.

rateslib.calendars.get_imm([month, year, code])

Return an IMM date for a specified month.

rateslib.calendars.add_tenor(start, tenor, ...)

Add a tenor to a given date under specific modification rules and holiday calendar.

rateslib.calendars.dcf(start, end, convention)

Calculate the day count fraction of a period.

Why use 3 Calendar types?#

Every calendar type has the same date manipulation methods, such as is_bus_day() or bus_date_range(), for example. The different types provide slightly different features.

Cal

The Cal class is the base holiday calendar. It is a simple object for storing a list of datetimes as the holidays and maintaining a record of what are the weekends (i.e. Saturdays and Sundays). Its business day assessment is made by comparing against its list of holidays and week_mask. Cals provide the flexibility to create custom calendars.

In [1]: cal = Cal(
   ...:     holidays=[dt(2023, 12, 25), dt(2023, 12, 26), dt(2024, 1, 1)],
   ...:     week_mask=[5, 6]
   ...: )
   ...: 

In [2]: cal.bus_date_range(start=dt(2023, 12, 18), end=dt(2024, 1, 5))
Out[2]: 
[datetime.datetime(2023, 12, 18, 0, 0),
 datetime.datetime(2023, 12, 19, 0, 0),
 datetime.datetime(2023, 12, 20, 0, 0),
 datetime.datetime(2023, 12, 21, 0, 0),
 datetime.datetime(2023, 12, 22, 0, 0),
 datetime.datetime(2023, 12, 27, 0, 0),
 datetime.datetime(2023, 12, 28, 0, 0),
 datetime.datetime(2023, 12, 29, 0, 0),
 datetime.datetime(2024, 1, 2, 0, 0),
 datetime.datetime(2024, 1, 3, 0, 0),
 datetime.datetime(2024, 1, 4, 0, 0),
 datetime.datetime(2024, 1, 5, 0, 0)]

For ease of use and performance rateslib has pre-defined and compiled a set of existing common fixed income calendars for example the european Target calendar and the FED’s settlement calendar. See default calendars.

UnionCal

The UnionCal class allows combinations of Cal, to extend the business day mathematics. This is required for multi-currency instruments. A UnionCal can contain, and replicate, just one Cal.

In [3]: union_cal = UnionCal(
   ...:     calendars=[cal],
   ...:     settlement_calendars=None
   ...: )
   ...: 

In [4]: union_cal.bus_date_range(start=dt(2023, 12, 18), end=dt(2024, 1, 5))
Out[4]: 
[datetime.datetime(2023, 12, 18, 0, 0),
 datetime.datetime(2023, 12, 19, 0, 0),
 datetime.datetime(2023, 12, 20, 0, 0),
 datetime.datetime(2023, 12, 21, 0, 0),
 datetime.datetime(2023, 12, 22, 0, 0),
 datetime.datetime(2023, 12, 27, 0, 0),
 datetime.datetime(2023, 12, 28, 0, 0),
 datetime.datetime(2023, 12, 29, 0, 0),
 datetime.datetime(2024, 1, 2, 0, 0),
 datetime.datetime(2024, 1, 3, 0, 0),
 datetime.datetime(2024, 1, 4, 0, 0),
 datetime.datetime(2024, 1, 5, 0, 0)]

Calendar equivalence checks that every business date and every potential settlement date are the same in both calendars. For example, in this case we have that:

In [5]: cal == union_cal
Out[5]: True

and these two calendar objects will perform exactly the same date manipulation functions.

NamedCal

The NamedCal class is a wrapper for a UnionCal. It is a convenient object because it will construct holiday calendars directly from rateslib’s pre-defined list of Cals using a string parsing syntax, which is suitable for multi-currency Instruments. This also improves serialization as shown below.

NamedCals can only be used to load and combine the pre-compiled calendars. Custom calendars must be created with the Cal and/or UnionCal objects.

Loading existing calendars#

It is possible to load one of the default calendars directly using a NamedCal as follows:

In [6]: named_cal = NamedCal("tgt")

Warning

Use defaults calendars at your own risk. Generally the repeated yearly holidays are accurate but a full list of ad-hoc and specialised holidays has may not necessarily be upto date.

Alternatively, the get_calendar() method can be used (and is used internally) to parse the different options a user might provide. This is more flexible because it can return a calendar with no holidays on null input, or it can also load custom calendars that have been dynamically added to rateslib’s defaults.calendars object, or it can also return Cal or UnionCal objects directly if preferred. This only has relevance for serialization.

In [7]: cal = get_calendar("ldn", named=False)

In [8]: type(cal)
Out[8]: rateslib.rs.Cal

In [9]: named_cal = get_calendar("ldn", named=True)

In [10]: type(named_cal)
Out[10]: rateslib.rs.NamedCal

In [11]: cal == named_cal
Out[11]: True

Serialization#

The cal and named_cal calendars created above are equivalent with reference to dates, even though they are two different types. The difference is how these objects are serialized. named_cal will deserialize to the “ldn” calendar that is defined as of the current version (and which may be updated from version to version), whilst cal is statically defined for a list of dates (it will never change).

In [12]: cal.to_json()
Out[12]: '{"Cal":{"holidays":["1970-01-01T00:00:00","1970-03-27T00:00:00","1970-03-30T00:00:00","1970-05-04T00:00:00","1970-05-25T00:00:00","1970-08-31T00:00:00","1970-12-25T00:00:00","1970-12-28T00:00:00","1971-01-01T00:00:00","1971-04-09T00:00:00","1971-04-12T00:00:00","1971-05-03T00:00:00","1971-05-31T00:00:00","1971-08-30T00:00:00","1971-12-27T00:00:00","1971-12-28T00:00:00","1972-01-03T00:00:00","1972-03-31T00:00:00","1972-04-03T00:00:00","1972-05-01T00:00:00","1972-05-29T00:00:00","1972-08-28T00:00:00","1972-12-25T00:00:00","1972-12-26T00:00:00","1973-01-01T00:00:00","1973-04-20T00:00:00","1973-04-23T00:00:00","1973-05-07T00:00:00","1973-05-28T00:00:00","1973-08-27T00:00:00","1973-12-25T00:00:00","1973-12-26T00:00:00","1974-01-01T00:00:00","1974-04-12T00:00:00","1974-04-15T00:00:00","1974-05-06T00:00:00","1974-05-27T00:00:00","1974-08-26T00:00:00","1974-12-25T00:00:00","1974-12-26T00:00:00","1975-01-01T00:00:00","1975-03-28T00:00:00","1975-03-31T00:00:00","1975-05-05T00:00:00","1975-05-26T00:00:00","1975-08-25T00:00:00","1975-12-25T00:00:00","1975-12-26T00:00:00","1976-01-01T00:00:00","1976-04-16T00:00:00","1976-04-19T00:00:00","1976-05-03T00:00:00","1976-05-31T00:00:00","1976-08-30T00:00:00","1976-12-27T00:00:00","1976-12-28T00:00:00","1977-01-03T00:00:00","1977-04-08T00:00:00","1977-04-11T00:00:00","1977-05-02T00:00:00","1977-05-30T00:00:00","1977-08-29T00:00:00","1977-12-26T00:00:00","1977-12-27T00:00:00","1978-01-02T00:00:00","1978-03-24T00:00:00","1978-03-27T00:00:00","1978-05-01T00:00:00","1978-05-29T00:00:00","1978-08-28T00:00:00","1978-12-25T00:00:00","1978-12-26T00:00:00","1979-01-01T00:00:00","1979-04-13T00:00:00","1979-04-16T00:00:00","1979-05-07T00:00:00","1979-05-28T00:00:00","1979-08-27T00:00:00","1979-12-25T00:00:00","1979-12-26T00:00:00","1980-01-01T00:00:00","1980-04-04T00:00:00","1980-04-07T00:00:00","1980-05-05T00:00:00","1980-05-26T00:00:00","1980-08-25T00:00:00","1980-12-25T00:00:00","1980-12-26T00:00:00","1981-01-01T00:00:00","1981-04-17T00:00:00","1981-04-20T00:00:00","1981-05-04T00:00:00","1981-05-25T00:00:00","1981-08-31T00:00:00","1981-12-25T00:00:00","1981-12-28T00:00:00","1982-01-01T00:00:00","1982-04-09T00:00:00","1982-04-12T00:00:00","1982-05-03T00:00:00","1982-05-31T00:00:00","1982-08-30T00:00:00","1982-12-27T00:00:00","1982-12-28T00:00:00","1983-01-03T00:00:00","1983-04-01T00:00:00","1983-04-04T00:00:00","1983-05-02T00:00:00","1983-05-30T00:00:00","1983-08-29T00:00:00","1983-12-26T00:00:00","1983-12-27T00:00:00","1984-01-02T00:00:00","1984-04-20T00:00:00","1984-04-23T00:00:00","1984-05-07T00:00:00","1984-05-28T00:00:00","1984-08-27T00:00:00","1984-12-25T00:00:00","1984-12-26T00:00:00","1985-01-01T00:00:00","1985-04-05T00:00:00","1985-04-08T00:00:00","1985-05-06T00:00:00","1985-05-27T00:00:00","1985-08-26T00:00:00","1985-12-25T00:00:00","1985-12-26T00:00:00","1986-01-01T00:00:00","1986-03-28T00:00:00","1986-03-31T00:00:00","1986-05-05T00:00:00","1986-05-26T00:00:00","1986-08-25T00:00:00","1986-12-25T00:00:00","1986-12-26T00:00:00","1987-01-01T00:00:00","1987-04-17T00:00:00","1987-04-20T00:00:00","1987-05-04T00:00:00","1987-05-25T00:00:00","1987-08-31T00:00:00","1987-12-25T00:00:00","1987-12-28T00:00:00","1988-01-01T00:00:00","1988-04-01T00:00:00","1988-04-04T00:00:00","1988-05-02T00:00:00","1988-05-30T00:00:00","1988-08-29T00:00:00","1988-12-26T00:00:00","1988-12-27T00:00:00","1989-01-02T00:00:00","1989-03-24T00:00:00","1989-03-27T00:00:00","1989-05-01T00:00:00","1989-05-29T00:00:00","1989-08-28T00:00:00","1989-12-25T00:00:00","1989-12-26T00:00:00","1990-01-01T00:00:00","1990-04-13T00:00:00","1990-04-16T00:00:00","1990-05-07T00:00:00","1990-05-28T00:00:00","1990-08-27T00:00:00","1990-12-25T00:00:00","1990-12-26T00:00:00","1991-01-01T00:00:00","1991-03-29T00:00:00","1991-04-01T00:00:00","1991-05-06T00:00:00","1991-05-27T00:00:00","1991-08-26T00:00:00","1991-12-25T00:00:00","1991-12-26T00:00:00","1992-01-01T00:00:00","1992-04-17T00:00:00","1992-04-20T00:00:00","1992-05-04T00:00:00","1992-05-25T00:00:00","1992-08-31T00:00:00","1992-12-25T00:00:00","1992-12-28T00:00:00","1993-01-01T00:00:00","1993-04-09T00:00:00","1993-04-12T00:00:00","1993-05-03T00:00:00","1993-05-31T00:00:00","1993-08-30T00:00:00","1993-12-27T00:00:00","1993-12-28T00:00:00","1994-01-03T00:00:00","1994-04-01T00:00:00","1994-04-04T00:00:00","1994-05-02T00:00:00","1994-05-30T00:00:00","1994-08-29T00:00:00","1994-12-26T00:00:00","1994-12-27T00:00:00","1995-01-02T00:00:00","1995-04-14T00:00:00","1995-04-17T00:00:00","1995-05-01T00:00:00","1995-05-29T00:00:00","1995-08-28T00:00:00","1995-12-25T00:00:00","1995-12-26T00:00:00","1996-01-01T00:00:00","1996-04-05T00:00:00","1996-04-08T00:00:00","1996-05-06T00:00:00","1996-05-27T00:00:00","1996-08-26T00:00:00","1996-12-25T00:00:00","1996-12-26T00:00:00","1997-01-01T00:00:00","1997-03-28T00:00:00","1997-03-31T00:00:00","1997-05-05T00:00:00","1997-05-26T00:00:00","1997-08-25T00:00:00","1997-12-25T00:00:00","1997-12-26T00:00:00","1998-01-01T00:00:00","1998-04-10T00:00:00","1998-04-13T00:00:00","1998-05-04T00:00:00","1998-05-25T00:00:00","1998-08-31T00:00:00","1998-12-25T00:00:00","1998-12-28T00:00:00","1999-01-01T00:00:00","1999-04-02T00:00:00","1999-04-05T00:00:00","1999-05-03T00:00:00","1999-05-31T00:00:00","1999-08-30T00:00:00","1999-12-27T00:00:00","1999-12-28T00:00:00","2000-01-03T00:00:00","2000-04-21T00:00:00","2000-04-24T00:00:00","2000-05-01T00:00:00","2000-05-29T00:00:00","2000-08-28T00:00:00","2000-12-25T00:00:00","2000-12-26T00:00:00","2001-01-01T00:00:00","2001-04-13T00:00:00","2001-04-16T00:00:00","2001-05-07T00:00:00","2001-05-28T00:00:00","2001-08-27T00:00:00","2001-12-25T00:00:00","2001-12-26T00:00:00","2002-01-01T00:00:00","2002-03-29T00:00:00","2002-04-01T00:00:00","2002-05-06T00:00:00","2002-05-27T00:00:00","2002-08-26T00:00:00","2002-12-25T00:00:00","2002-12-26T00:00:00","2003-01-01T00:00:00","2003-04-18T00:00:00","2003-04-21T00:00:00","2003-05-05T00:00:00","2003-05-26T00:00:00","2003-08-25T00:00:00","2003-12-25T00:00:00","2003-12-26T00:00:00","2004-01-01T00:00:00","2004-04-09T00:00:00","2004-04-12T00:00:00","2004-05-03T00:00:00","2004-05-31T00:00:00","2004-08-30T00:00:00","2004-12-27T00:00:00","2004-12-28T00:00:00","2005-01-03T00:00:00","2005-03-25T00:00:00","2005-03-28T00:00:00","2005-05-02T00:00:00","2005-05-30T00:00:00","2005-08-29T00:00:00","2005-12-26T00:00:00","2005-12-27T00:00:00","2006-01-02T00:00:00","2006-04-14T00:00:00","2006-04-17T00:00:00","2006-05-01T00:00:00","2006-05-29T00:00:00","2006-08-28T00:00:00","2006-12-25T00:00:00","2006-12-26T00:00:00","2007-01-01T00:00:00","2007-04-06T00:00:00","2007-04-09T00:00:00","2007-05-07T00:00:00","2007-05-28T00:00:00","2007-08-27T00:00:00","2007-12-25T00:00:00","2007-12-26T00:00:00","2008-01-01T00:00:00","2008-03-21T00:00:00","2008-03-24T00:00:00","2008-05-05T00:00:00","2008-05-26T00:00:00","2008-08-25T00:00:00","2008-12-25T00:00:00","2008-12-26T00:00:00","2009-01-01T00:00:00","2009-04-10T00:00:00","2009-04-13T00:00:00","2009-05-04T00:00:00","2009-05-25T00:00:00","2009-08-31T00:00:00","2009-12-25T00:00:00","2009-12-28T00:00:00","2010-01-01T00:00:00","2010-04-02T00:00:00","2010-04-05T00:00:00","2010-05-03T00:00:00","2010-05-31T00:00:00","2010-08-30T00:00:00","2010-12-27T00:00:00","2010-12-28T00:00:00","2011-01-03T00:00:00","2011-04-22T00:00:00","2011-04-25T00:00:00","2011-05-02T00:00:00","2011-05-30T00:00:00","2011-08-29T00:00:00","2011-12-26T00:00:00","2011-12-27T00:00:00","2012-01-02T00:00:00","2012-04-06T00:00:00","2012-04-09T00:00:00","2012-05-07T00:00:00","2012-05-28T00:00:00","2012-08-27T00:00:00","2012-12-25T00:00:00","2012-12-26T00:00:00","2013-01-01T00:00:00","2013-03-29T00:00:00","2013-04-01T00:00:00","2013-05-06T00:00:00","2013-05-27T00:00:00","2013-08-26T00:00:00","2013-12-25T00:00:00","2013-12-26T00:00:00","2014-01-01T00:00:00","2014-04-18T00:00:00","2014-04-21T00:00:00","2014-05-05T00:00:00","2014-05-26T00:00:00","2014-08-25T00:00:00","2014-12-25T00:00:00","2014-12-26T00:00:00","2015-01-01T00:00:00","2015-04-03T00:00:00","2015-04-06T00:00:00","2015-05-04T00:00:00","2015-05-25T00:00:00","2015-08-31T00:00:00","2015-12-25T00:00:00","2015-12-28T00:00:00","2016-01-01T00:00:00","2016-03-25T00:00:00","2016-03-28T00:00:00","2016-05-02T00:00:00","2016-05-30T00:00:00","2016-08-29T00:00:00","2016-12-26T00:00:00","2016-12-27T00:00:00","2017-01-02T00:00:00","2017-04-14T00:00:00","2017-04-17T00:00:00","2017-05-01T00:00:00","2017-05-29T00:00:00","2017-08-28T00:00:00","2017-12-25T00:00:00","2017-12-26T00:00:00","2018-01-01T00:00:00","2018-03-30T00:00:00","2018-04-02T00:00:00","2018-05-07T00:00:00","2018-05-28T00:00:00","2018-08-27T00:00:00","2018-12-25T00:00:00","2018-12-26T00:00:00","2019-01-01T00:00:00","2019-04-19T00:00:00","2019-04-22T00:00:00","2019-05-06T00:00:00","2019-05-27T00:00:00","2019-08-26T00:00:00","2019-12-25T00:00:00","2019-12-26T00:00:00","2020-01-01T00:00:00","2020-04-10T00:00:00","2020-04-13T00:00:00","2020-05-04T00:00:00","2020-05-25T00:00:00","2020-08-31T00:00:00","2020-12-25T00:00:00","2020-12-28T00:00:00","2021-01-01T00:00:00","2021-04-02T00:00:00","2021-04-05T00:00:00","2021-05-03T00:00:00","2021-05-31T00:00:00","2021-08-30T00:00:00","2021-12-27T00:00:00","2021-12-28T00:00:00","2022-01-03T00:00:00","2022-04-15T00:00:00","2022-04-18T00:00:00","2022-05-02T00:00:00","2022-06-02T00:00:00","2022-06-03T00:00:00","2022-08-29T00:00:00","2022-09-19T00:00:00","2022-12-26T00:00:00","2022-12-27T00:00:00","2023-01-02T00:00:00","2023-04-07T00:00:00","2023-04-10T00:00:00","2023-05-01T00:00:00","2023-05-08T00:00:00","2023-05-29T00:00:00","2023-08-28T00:00:00","2023-12-25T00:00:00","2023-12-26T00:00:00","2024-01-01T00:00:00","2024-03-29T00:00:00","2024-04-01T00:00:00","2024-05-06T00:00:00","2024-05-27T00:00:00","2024-08-26T00:00:00","2024-12-25T00:00:00","2024-12-26T00:00:00","2025-01-01T00:00:00","2025-04-18T00:00:00","2025-04-21T00:00:00","2025-05-05T00:00:00","2025-05-26T00:00:00","2025-08-25T00:00:00","2025-12-25T00:00:00","2025-12-26T00:00:00","2026-01-01T00:00:00","2026-04-03T00:00:00","2026-04-06T00:00:00","2026-05-04T00:00:00","2026-05-25T00:00:00","2026-08-31T00:00:00","2026-12-25T00:00:00","2026-12-28T00:00:00","2027-01-01T00:00:00","2027-03-26T00:00:00","2027-03-29T00:00:00","2027-05-03T00:00:00","2027-05-31T00:00:00","2027-08-30T00:00:00","2027-12-27T00:00:00","2027-12-28T00:00:00","2028-01-03T00:00:00","2028-04-14T00:00:00","2028-04-17T00:00:00","2028-05-01T00:00:00","2028-05-29T00:00:00","2028-08-28T00:00:00","2028-12-25T00:00:00","2028-12-26T00:00:00","2029-01-01T00:00:00","2029-03-30T00:00:00","2029-04-02T00:00:00","2029-05-07T00:00:00","2029-05-28T00:00:00","2029-08-27T00:00:00","2029-12-25T00:00:00","2029-12-26T00:00:00","2030-01-01T00:00:00","2030-04-19T00:00:00","2030-04-22T00:00:00","2030-05-06T00:00:00","2030-05-27T00:00:00","2030-08-26T00:00:00","2030-12-25T00:00:00","2030-12-26T00:00:00","2031-01-01T00:00:00","2031-04-11T00:00:00","2031-04-14T00:00:00","2031-05-05T00:00:00","2031-05-26T00:00:00","2031-08-25T00:00:00","2031-12-25T00:00:00","2031-12-26T00:00:00","2032-01-01T00:00:00","2032-03-26T00:00:00","2032-03-29T00:00:00","2032-05-03T00:00:00","2032-05-31T00:00:00","2032-08-30T00:00:00","2032-12-27T00:00:00","2032-12-28T00:00:00","2033-01-03T00:00:00","2033-04-15T00:00:00","2033-04-18T00:00:00","2033-05-02T00:00:00","2033-05-30T00:00:00","2033-08-29T00:00:00","2033-12-26T00:00:00","2033-12-27T00:00:00","2034-01-02T00:00:00","2034-04-07T00:00:00","2034-04-10T00:00:00","2034-05-01T00:00:00","2034-05-29T00:00:00","2034-08-28T00:00:00","2034-12-25T00:00:00","2034-12-26T00:00:00","2035-01-01T00:00:00","2035-03-23T00:00:00","2035-03-26T00:00:00","2035-05-07T00:00:00","2035-05-28T00:00:00","2035-08-27T00:00:00","2035-12-25T00:00:00","2035-12-26T00:00:00","2036-01-01T00:00:00","2036-04-11T00:00:00","2036-04-14T00:00:00","2036-05-05T00:00:00","2036-05-26T00:00:00","2036-08-25T00:00:00","2036-12-25T00:00:00","2036-12-26T00:00:00","2037-01-01T00:00:00","2037-04-03T00:00:00","2037-04-06T00:00:00","2037-05-04T00:00:00","2037-05-25T00:00:00","2037-08-31T00:00:00","2037-12-25T00:00:00","2037-12-28T00:00:00","2038-01-01T00:00:00","2038-04-23T00:00:00","2038-04-26T00:00:00","2038-05-03T00:00:00","2038-05-31T00:00:00","2038-08-30T00:00:00","2038-12-27T00:00:00","2038-12-28T00:00:00","2039-01-03T00:00:00","2039-04-08T00:00:00","2039-04-11T00:00:00","2039-05-02T00:00:00","2039-05-30T00:00:00","2039-08-29T00:00:00","2039-12-26T00:00:00","2039-12-27T00:00:00","2040-01-02T00:00:00","2040-03-30T00:00:00","2040-04-02T00:00:00","2040-05-07T00:00:00","2040-05-28T00:00:00","2040-08-27T00:00:00","2040-12-25T00:00:00","2040-12-26T00:00:00","2041-01-01T00:00:00","2041-04-19T00:00:00","2041-04-22T00:00:00","2041-05-06T00:00:00","2041-05-27T00:00:00","2041-08-26T00:00:00","2041-12-25T00:00:00","2041-12-26T00:00:00","2042-01-01T00:00:00","2042-04-04T00:00:00","2042-04-07T00:00:00","2042-05-05T00:00:00","2042-05-26T00:00:00","2042-08-25T00:00:00","2042-12-25T00:00:00","2042-12-26T00:00:00","2043-01-01T00:00:00","2043-03-27T00:00:00","2043-03-30T00:00:00","2043-05-04T00:00:00","2043-05-25T00:00:00","2043-08-31T00:00:00","2043-12-25T00:00:00","2043-12-28T00:00:00","2044-01-01T00:00:00","2044-04-15T00:00:00","2044-04-18T00:00:00","2044-05-02T00:00:00","2044-05-30T00:00:00","2044-08-29T00:00:00","2044-12-26T00:00:00","2044-12-27T00:00:00","2045-01-02T00:00:00","2045-04-07T00:00:00","2045-04-10T00:00:00","2045-05-01T00:00:00","2045-05-29T00:00:00","2045-08-28T00:00:00","2045-12-25T00:00:00","2045-12-26T00:00:00","2046-01-01T00:00:00","2046-03-23T00:00:00","2046-03-26T00:00:00","2046-05-07T00:00:00","2046-05-28T00:00:00","2046-08-27T00:00:00","2046-12-25T00:00:00","2046-12-26T00:00:00","2047-01-01T00:00:00","2047-04-12T00:00:00","2047-04-15T00:00:00","2047-05-06T00:00:00","2047-05-27T00:00:00","2047-08-26T00:00:00","2047-12-25T00:00:00","2047-12-26T00:00:00","2048-01-01T00:00:00","2048-04-03T00:00:00","2048-04-06T00:00:00","2048-05-04T00:00:00","2048-05-25T00:00:00","2048-08-31T00:00:00","2048-12-25T00:00:00","2048-12-28T00:00:00","2049-01-01T00:00:00","2049-04-16T00:00:00","2049-04-19T00:00:00","2049-05-03T00:00:00","2049-05-31T00:00:00","2049-08-30T00:00:00","2049-12-27T00:00:00","2049-12-28T00:00:00","2050-01-03T00:00:00","2050-04-08T00:00:00","2050-04-11T00:00:00","2050-05-02T00:00:00","2050-05-30T00:00:00","2050-08-29T00:00:00","2050-12-26T00:00:00","2050-12-27T00:00:00","2051-01-02T00:00:00","2051-03-31T00:00:00","2051-04-03T00:00:00","2051-05-01T00:00:00","2051-05-29T00:00:00","2051-08-28T00:00:00","2051-12-25T00:00:00","2051-12-26T00:00:00","2052-01-01T00:00:00","2052-04-19T00:00:00","2052-04-22T00:00:00","2052-05-06T00:00:00","2052-05-27T00:00:00","2052-08-26T00:00:00","2052-12-25T00:00:00","2052-12-26T00:00:00","2053-01-01T00:00:00","2053-04-04T00:00:00","2053-04-07T00:00:00","2053-05-05T00:00:00","2053-05-26T00:00:00","2053-08-25T00:00:00","2053-12-25T00:00:00","2053-12-26T00:00:00","2054-01-01T00:00:00","2054-03-27T00:00:00","2054-03-30T00:00:00","2054-05-04T00:00:00","2054-05-25T00:00:00","2054-08-31T00:00:00","2054-12-25T00:00:00","2054-12-28T00:00:00","2055-01-01T00:00:00","2055-04-16T00:00:00","2055-04-19T00:00:00","2055-05-03T00:00:00","2055-05-31T00:00:00","2055-08-30T00:00:00","2055-12-27T00:00:00","2055-12-28T00:00:00","2056-01-03T00:00:00","2056-03-31T00:00:00","2056-04-03T00:00:00","2056-05-01T00:00:00","2056-05-29T00:00:00","2056-08-28T00:00:00","2056-12-25T00:00:00","2056-12-26T00:00:00","2057-01-01T00:00:00","2057-04-20T00:00:00","2057-04-23T00:00:00","2057-05-07T00:00:00","2057-05-28T00:00:00","2057-08-27T00:00:00","2057-12-25T00:00:00","2057-12-26T00:00:00","2058-01-01T00:00:00","2058-04-12T00:00:00","2058-04-15T00:00:00","2058-05-06T00:00:00","2058-05-27T00:00:00","2058-08-26T00:00:00","2058-12-25T00:00:00","2058-12-26T00:00:00","2059-01-01T00:00:00","2059-03-28T00:00:00","2059-03-31T00:00:00","2059-05-05T00:00:00","2059-05-26T00:00:00","2059-08-25T00:00:00","2059-12-25T00:00:00","2059-12-26T00:00:00","2060-01-01T00:00:00","2060-04-16T00:00:00","2060-04-19T00:00:00","2060-05-03T00:00:00","2060-05-31T00:00:00","2060-08-30T00:00:00","2060-12-27T00:00:00","2060-12-28T00:00:00","2061-01-03T00:00:00","2061-04-08T00:00:00","2061-04-11T00:00:00","2061-05-02T00:00:00","2061-05-30T00:00:00","2061-08-29T00:00:00","2061-12-26T00:00:00","2061-12-27T00:00:00","2062-01-02T00:00:00","2062-03-24T00:00:00","2062-03-27T00:00:00","2062-05-01T00:00:00","2062-05-29T00:00:00","2062-08-28T00:00:00","2062-12-25T00:00:00","2062-12-26T00:00:00","2063-01-01T00:00:00","2063-04-13T00:00:00","2063-04-16T00:00:00","2063-05-07T00:00:00","2063-05-28T00:00:00","2063-08-27T00:00:00","2063-12-25T00:00:00","2063-12-26T00:00:00","2064-01-01T00:00:00","2064-04-04T00:00:00","2064-04-07T00:00:00","2064-05-05T00:00:00","2064-05-26T00:00:00","2064-08-25T00:00:00","2064-12-25T00:00:00","2064-12-26T00:00:00","2065-01-01T00:00:00","2065-03-27T00:00:00","2065-03-30T00:00:00","2065-05-04T00:00:00","2065-05-25T00:00:00","2065-08-31T00:00:00","2065-12-25T00:00:00","2065-12-28T00:00:00","2066-01-01T00:00:00","2066-04-09T00:00:00","2066-04-12T00:00:00","2066-05-03T00:00:00","2066-05-31T00:00:00","2066-08-30T00:00:00","2066-12-27T00:00:00","2066-12-28T00:00:00","2067-01-03T00:00:00","2067-04-01T00:00:00","2067-04-04T00:00:00","2067-05-02T00:00:00","2067-05-30T00:00:00","2067-08-29T00:00:00","2067-12-26T00:00:00","2067-12-27T00:00:00","2068-01-02T00:00:00","2068-04-20T00:00:00","2068-04-23T00:00:00","2068-05-07T00:00:00","2068-05-28T00:00:00","2068-08-27T00:00:00","2068-12-25T00:00:00","2068-12-26T00:00:00","2069-01-01T00:00:00","2069-04-12T00:00:00","2069-04-15T00:00:00","2069-05-06T00:00:00","2069-05-27T00:00:00","2069-08-26T00:00:00","2069-12-25T00:00:00","2069-12-26T00:00:00","2070-01-01T00:00:00","2070-03-28T00:00:00","2070-03-31T00:00:00","2070-05-05T00:00:00","2070-05-26T00:00:00","2070-08-25T00:00:00","2070-12-25T00:00:00","2070-12-26T00:00:00","2071-01-01T00:00:00","2071-04-17T00:00:00","2071-04-20T00:00:00","2071-05-04T00:00:00","2071-05-25T00:00:00","2071-08-31T00:00:00","2071-12-25T00:00:00","2071-12-28T00:00:00","2072-01-01T00:00:00","2072-04-08T00:00:00","2072-04-11T00:00:00","2072-05-02T00:00:00","2072-05-30T00:00:00","2072-08-29T00:00:00","2072-12-26T00:00:00","2072-12-27T00:00:00","2073-01-02T00:00:00","2073-03-24T00:00:00","2073-03-27T00:00:00","2073-05-01T00:00:00","2073-05-29T00:00:00","2073-08-28T00:00:00","2073-12-25T00:00:00","2073-12-26T00:00:00","2074-01-01T00:00:00","2074-04-13T00:00:00","2074-04-16T00:00:00","2074-05-07T00:00:00","2074-05-28T00:00:00","2074-08-27T00:00:00","2074-12-25T00:00:00","2074-12-26T00:00:00","2075-01-01T00:00:00","2075-04-05T00:00:00","2075-04-08T00:00:00","2075-05-06T00:00:00","2075-05-27T00:00:00","2075-08-26T00:00:00","2075-12-25T00:00:00","2075-12-26T00:00:00","2076-01-01T00:00:00","2076-04-17T00:00:00","2076-04-20T00:00:00","2076-05-04T00:00:00","2076-05-25T00:00:00","2076-08-31T00:00:00","2076-12-25T00:00:00","2076-12-28T00:00:00","2077-01-01T00:00:00","2077-04-09T00:00:00","2077-04-12T00:00:00","2077-05-03T00:00:00","2077-05-31T00:00:00","2077-08-30T00:00:00","2077-12-27T00:00:00","2077-12-28T00:00:00","2078-01-03T00:00:00","2078-04-01T00:00:00","2078-04-04T00:00:00","2078-05-02T00:00:00","2078-05-30T00:00:00","2078-08-29T00:00:00","2078-12-26T00:00:00","2078-12-27T00:00:00","2079-01-02T00:00:00","2079-04-21T00:00:00","2079-04-24T00:00:00","2079-05-01T00:00:00","2079-05-29T00:00:00","2079-08-28T00:00:00","2079-12-25T00:00:00","2079-12-26T00:00:00","2080-01-01T00:00:00","2080-04-05T00:00:00","2080-04-08T00:00:00","2080-05-06T00:00:00","2080-05-27T00:00:00","2080-08-26T00:00:00","2080-12-25T00:00:00","2080-12-26T00:00:00","2081-01-01T00:00:00","2081-03-28T00:00:00","2081-03-31T00:00:00","2081-05-05T00:00:00","2081-05-26T00:00:00","2081-08-25T00:00:00","2081-12-25T00:00:00","2081-12-26T00:00:00","2082-01-01T00:00:00","2082-04-17T00:00:00","2082-04-20T00:00:00","2082-05-04T00:00:00","2082-05-25T00:00:00","2082-08-31T00:00:00","2082-12-25T00:00:00","2082-12-28T00:00:00","2083-01-01T00:00:00","2083-04-02T00:00:00","2083-04-05T00:00:00","2083-05-03T00:00:00","2083-05-31T00:00:00","2083-08-30T00:00:00","2083-12-27T00:00:00","2083-12-28T00:00:00","2084-01-03T00:00:00","2084-03-24T00:00:00","2084-03-27T00:00:00","2084-05-01T00:00:00","2084-05-29T00:00:00","2084-08-28T00:00:00","2084-12-25T00:00:00","2084-12-26T00:00:00","2085-01-01T00:00:00","2085-04-13T00:00:00","2085-04-16T00:00:00","2085-05-07T00:00:00","2085-05-28T00:00:00","2085-08-27T00:00:00","2085-12-25T00:00:00","2085-12-26T00:00:00","2086-01-01T00:00:00","2086-03-29T00:00:00","2086-04-01T00:00:00","2086-05-06T00:00:00","2086-05-27T00:00:00","2086-08-26T00:00:00","2086-12-25T00:00:00","2086-12-26T00:00:00","2087-01-01T00:00:00","2087-04-18T00:00:00","2087-04-21T00:00:00","2087-05-05T00:00:00","2087-05-26T00:00:00","2087-08-25T00:00:00","2087-12-25T00:00:00","2087-12-26T00:00:00","2088-01-01T00:00:00","2088-04-09T00:00:00","2088-04-12T00:00:00","2088-05-03T00:00:00","2088-05-31T00:00:00","2088-08-30T00:00:00","2088-12-27T00:00:00","2088-12-28T00:00:00","2089-01-03T00:00:00","2089-04-01T00:00:00","2089-04-04T00:00:00","2089-05-02T00:00:00","2089-05-30T00:00:00","2089-08-29T00:00:00","2089-12-26T00:00:00","2089-12-27T00:00:00","2090-01-02T00:00:00","2090-04-14T00:00:00","2090-04-17T00:00:00","2090-05-01T00:00:00","2090-05-29T00:00:00","2090-08-28T00:00:00","2090-12-25T00:00:00","2090-12-26T00:00:00","2091-01-01T00:00:00","2091-04-06T00:00:00","2091-04-09T00:00:00","2091-05-07T00:00:00","2091-05-28T00:00:00","2091-08-27T00:00:00","2091-12-25T00:00:00","2091-12-26T00:00:00","2092-01-01T00:00:00","2092-03-28T00:00:00","2092-03-31T00:00:00","2092-05-05T00:00:00","2092-05-26T00:00:00","2092-08-25T00:00:00","2092-12-25T00:00:00","2092-12-26T00:00:00","2093-01-01T00:00:00","2093-04-10T00:00:00","2093-04-13T00:00:00","2093-05-04T00:00:00","2093-05-25T00:00:00","2093-08-31T00:00:00","2093-12-25T00:00:00","2093-12-28T00:00:00","2094-01-01T00:00:00","2094-04-02T00:00:00","2094-04-05T00:00:00","2094-05-03T00:00:00","2094-05-31T00:00:00","2094-08-30T00:00:00","2094-12-27T00:00:00","2094-12-28T00:00:00","2095-01-03T00:00:00","2095-04-22T00:00:00","2095-04-25T00:00:00","2095-05-02T00:00:00","2095-05-30T00:00:00","2095-08-29T00:00:00","2095-12-26T00:00:00","2095-12-27T00:00:00","2096-01-02T00:00:00","2096-04-13T00:00:00","2096-04-16T00:00:00","2096-05-07T00:00:00","2096-05-28T00:00:00","2096-08-27T00:00:00","2096-12-25T00:00:00","2096-12-26T00:00:00","2097-01-01T00:00:00","2097-03-29T00:00:00","2097-04-01T00:00:00","2097-05-06T00:00:00","2097-05-27T00:00:00","2097-08-26T00:00:00","2097-12-25T00:00:00","2097-12-26T00:00:00","2098-01-01T00:00:00","2098-04-18T00:00:00","2098-04-21T00:00:00","2098-05-05T00:00:00","2098-05-26T00:00:00","2098-08-25T00:00:00","2098-12-25T00:00:00","2098-12-26T00:00:00","2099-01-01T00:00:00","2099-04-10T00:00:00","2099-04-13T00:00:00","2099-05-04T00:00:00","2099-05-25T00:00:00","2099-08-31T00:00:00","2099-12-25T00:00:00","2099-12-28T00:00:00","2100-01-01T00:00:00","2100-03-26T00:00:00","2100-03-29T00:00:00","2100-05-03T00:00:00","2100-05-31T00:00:00","2100-08-30T00:00:00","2100-12-27T00:00:00","2100-12-28T00:00:00","2101-01-03T00:00:00","2101-04-15T00:00:00","2101-04-18T00:00:00","2101-05-02T00:00:00","2101-05-30T00:00:00","2101-08-29T00:00:00","2101-12-26T00:00:00","2101-12-27T00:00:00","2102-01-02T00:00:00","2102-04-07T00:00:00","2102-04-10T00:00:00","2102-05-01T00:00:00","2102-05-29T00:00:00","2102-08-28T00:00:00","2102-12-25T00:00:00","2102-12-26T00:00:00","2103-01-01T00:00:00","2103-03-23T00:00:00","2103-03-26T00:00:00","2103-05-07T00:00:00","2103-05-28T00:00:00","2103-08-27T00:00:00","2103-12-25T00:00:00","2103-12-26T00:00:00","2104-01-01T00:00:00","2104-04-11T00:00:00","2104-04-14T00:00:00","2104-05-05T00:00:00","2104-05-26T00:00:00","2104-08-25T00:00:00","2104-12-25T00:00:00","2104-12-26T00:00:00","2105-01-01T00:00:00","2105-04-03T00:00:00","2105-04-06T00:00:00","2105-05-04T00:00:00","2105-05-25T00:00:00","2105-08-31T00:00:00","2105-12-25T00:00:00","2105-12-28T00:00:00","2106-01-01T00:00:00","2106-04-16T00:00:00","2106-04-19T00:00:00","2106-05-03T00:00:00","2106-05-31T00:00:00","2106-08-30T00:00:00","2106-12-27T00:00:00","2106-12-28T00:00:00","2107-01-03T00:00:00","2107-04-08T00:00:00","2107-04-11T00:00:00","2107-05-02T00:00:00","2107-05-30T00:00:00","2107-08-29T00:00:00","2107-12-26T00:00:00","2107-12-27T00:00:00","2108-01-02T00:00:00","2108-03-30T00:00:00","2108-04-02T00:00:00","2108-05-07T00:00:00","2108-05-28T00:00:00","2108-08-27T00:00:00","2108-12-25T00:00:00","2108-12-26T00:00:00","2109-01-01T00:00:00","2109-04-19T00:00:00","2109-04-22T00:00:00","2109-05-06T00:00:00","2109-05-27T00:00:00","2109-08-26T00:00:00","2109-12-25T00:00:00","2109-12-26T00:00:00","2110-01-01T00:00:00","2110-04-04T00:00:00","2110-04-07T00:00:00","2110-05-05T00:00:00","2110-05-26T00:00:00","2110-08-25T00:00:00","2110-12-25T00:00:00","2110-12-26T00:00:00","2111-01-01T00:00:00","2111-03-27T00:00:00","2111-03-30T00:00:00","2111-05-04T00:00:00","2111-05-25T00:00:00","2111-08-31T00:00:00","2111-12-25T00:00:00","2111-12-28T00:00:00","2112-01-01T00:00:00","2112-04-15T00:00:00","2112-04-18T00:00:00","2112-05-02T00:00:00","2112-05-30T00:00:00","2112-08-29T00:00:00","2112-12-26T00:00:00","2112-12-27T00:00:00","2113-01-02T00:00:00","2113-03-31T00:00:00","2113-04-03T00:00:00","2113-05-01T00:00:00","2113-05-29T00:00:00","2113-08-28T00:00:00","2113-12-25T00:00:00","2113-12-26T00:00:00","2114-01-01T00:00:00","2114-04-20T00:00:00","2114-04-23T00:00:00","2114-05-07T00:00:00","2114-05-28T00:00:00","2114-08-27T00:00:00","2114-12-25T00:00:00","2114-12-26T00:00:00","2115-01-01T00:00:00","2115-04-12T00:00:00","2115-04-15T00:00:00","2115-05-06T00:00:00","2115-05-27T00:00:00","2115-08-26T00:00:00","2115-12-25T00:00:00","2115-12-26T00:00:00","2116-01-01T00:00:00","2116-03-27T00:00:00","2116-03-30T00:00:00","2116-05-04T00:00:00","2116-05-25T00:00:00","2116-08-31T00:00:00","2116-12-25T00:00:00","2116-12-28T00:00:00","2117-01-01T00:00:00","2117-04-16T00:00:00","2117-04-19T00:00:00","2117-05-03T00:00:00","2117-05-31T00:00:00","2117-08-30T00:00:00","2117-12-27T00:00:00","2117-12-28T00:00:00","2118-01-03T00:00:00","2118-04-08T00:00:00","2118-04-11T00:00:00","2118-05-02T00:00:00","2118-05-30T00:00:00","2118-08-29T00:00:00","2118-12-26T00:00:00","2118-12-27T00:00:00","2119-01-02T00:00:00","2119-03-24T00:00:00","2119-03-27T00:00:00","2119-05-01T00:00:00","2119-05-29T00:00:00","2119-08-28T00:00:00","2119-12-25T00:00:00","2119-12-26T00:00:00","2120-01-01T00:00:00","2120-04-12T00:00:00","2120-04-15T00:00:00","2120-05-06T00:00:00","2120-05-27T00:00:00","2120-08-26T00:00:00","2120-12-25T00:00:00","2120-12-26T00:00:00","2121-01-01T00:00:00","2121-04-04T00:00:00","2121-04-07T00:00:00","2121-05-05T00:00:00","2121-05-26T00:00:00","2121-08-25T00:00:00","2121-12-25T00:00:00","2121-12-26T00:00:00","2122-01-01T00:00:00","2122-03-27T00:00:00","2122-03-30T00:00:00","2122-05-04T00:00:00","2122-05-25T00:00:00","2122-08-31T00:00:00","2122-12-25T00:00:00","2122-12-28T00:00:00","2123-01-01T00:00:00","2123-04-09T00:00:00","2123-04-12T00:00:00","2123-05-03T00:00:00","2123-05-31T00:00:00","2123-08-30T00:00:00","2123-12-27T00:00:00","2123-12-28T00:00:00","2124-01-03T00:00:00","2124-03-31T00:00:00","2124-04-03T00:00:00","2124-05-01T00:00:00","2124-05-29T00:00:00","2124-08-28T00:00:00","2124-12-25T00:00:00","2124-12-26T00:00:00","2125-01-01T00:00:00","2125-04-20T00:00:00","2125-04-23T00:00:00","2125-05-07T00:00:00","2125-05-28T00:00:00","2125-08-27T00:00:00","2125-12-25T00:00:00","2125-12-26T00:00:00","2126-01-01T00:00:00","2126-04-12T00:00:00","2126-04-15T00:00:00","2126-05-06T00:00:00","2126-05-27T00:00:00","2126-08-26T00:00:00","2126-12-25T00:00:00","2126-12-26T00:00:00","2127-01-01T00:00:00","2127-03-28T00:00:00","2127-03-31T00:00:00","2127-05-05T00:00:00","2127-05-26T00:00:00","2127-08-25T00:00:00","2127-12-25T00:00:00","2127-12-26T00:00:00","2128-01-01T00:00:00","2128-04-16T00:00:00","2128-04-19T00:00:00","2128-05-03T00:00:00","2128-05-31T00:00:00","2128-08-30T00:00:00","2128-12-27T00:00:00","2128-12-28T00:00:00","2129-01-03T00:00:00","2129-04-08T00:00:00","2129-04-11T00:00:00","2129-05-02T00:00:00","2129-05-30T00:00:00","2129-08-29T00:00:00","2129-12-26T00:00:00","2129-12-27T00:00:00","2130-01-02T00:00:00","2130-03-24T00:00:00","2130-03-27T00:00:00","2130-05-01T00:00:00","2130-05-29T00:00:00","2130-08-28T00:00:00","2130-12-25T00:00:00","2130-12-26T00:00:00","2131-01-01T00:00:00","2131-04-13T00:00:00","2131-04-16T00:00:00","2131-05-07T00:00:00","2131-05-28T00:00:00","2131-08-27T00:00:00","2131-12-25T00:00:00","2131-12-26T00:00:00","2132-01-01T00:00:00","2132-04-04T00:00:00","2132-04-07T00:00:00","2132-05-05T00:00:00","2132-05-26T00:00:00","2132-08-25T00:00:00","2132-12-25T00:00:00","2132-12-26T00:00:00","2133-01-01T00:00:00","2133-04-17T00:00:00","2133-04-20T00:00:00","2133-05-04T00:00:00","2133-05-25T00:00:00","2133-08-31T00:00:00","2133-12-25T00:00:00","2133-12-28T00:00:00","2134-01-01T00:00:00","2134-04-09T00:00:00","2134-04-12T00:00:00","2134-05-03T00:00:00","2134-05-31T00:00:00","2134-08-30T00:00:00","2134-12-27T00:00:00","2134-12-28T00:00:00","2135-01-03T00:00:00","2135-04-01T00:00:00","2135-04-04T00:00:00","2135-05-02T00:00:00","2135-05-30T00:00:00","2135-08-29T00:00:00","2135-12-26T00:00:00","2135-12-27T00:00:00","2136-01-02T00:00:00","2136-04-20T00:00:00","2136-04-23T00:00:00","2136-05-07T00:00:00","2136-05-28T00:00:00","2136-08-27T00:00:00","2136-12-25T00:00:00","2136-12-26T00:00:00","2137-01-01T00:00:00","2137-04-05T00:00:00","2137-04-08T00:00:00","2137-05-06T00:00:00","2137-05-27T00:00:00","2137-08-26T00:00:00","2137-12-25T00:00:00","2137-12-26T00:00:00","2138-01-01T00:00:00","2138-03-28T00:00:00","2138-03-31T00:00:00","2138-05-05T00:00:00","2138-05-26T00:00:00","2138-08-25T00:00:00","2138-12-25T00:00:00","2138-12-26T00:00:00","2139-01-01T00:00:00","2139-04-17T00:00:00","2139-04-20T00:00:00","2139-05-04T00:00:00","2139-05-25T00:00:00","2139-08-31T00:00:00","2139-12-25T00:00:00","2139-12-28T00:00:00","2140-01-01T00:00:00","2140-04-01T00:00:00","2140-04-04T00:00:00","2140-05-02T00:00:00","2140-05-30T00:00:00","2140-08-29T00:00:00","2140-12-26T00:00:00","2140-12-27T00:00:00","2141-01-02T00:00:00","2141-03-24T00:00:00","2141-03-27T00:00:00","2141-05-01T00:00:00","2141-05-29T00:00:00","2141-08-28T00:00:00","2141-12-25T00:00:00","2141-12-26T00:00:00","2142-01-01T00:00:00","2142-04-13T00:00:00","2142-04-16T00:00:00","2142-05-07T00:00:00","2142-05-28T00:00:00","2142-08-27T00:00:00","2142-12-25T00:00:00","2142-12-26T00:00:00","2143-01-01T00:00:00","2143-03-29T00:00:00","2143-04-01T00:00:00","2143-05-06T00:00:00","2143-05-27T00:00:00","2143-08-26T00:00:00","2143-12-25T00:00:00","2143-12-26T00:00:00","2144-01-01T00:00:00","2144-04-17T00:00:00","2144-04-20T00:00:00","2144-05-04T00:00:00","2144-05-25T00:00:00","2144-08-31T00:00:00","2144-12-25T00:00:00","2144-12-28T00:00:00","2145-01-01T00:00:00","2145-04-09T00:00:00","2145-04-12T00:00:00","2145-05-03T00:00:00","2145-05-31T00:00:00","2145-08-30T00:00:00","2145-12-27T00:00:00","2145-12-28T00:00:00","2146-01-03T00:00:00","2146-04-01T00:00:00","2146-04-04T00:00:00","2146-05-02T00:00:00","2146-05-30T00:00:00","2146-08-29T00:00:00","2146-12-26T00:00:00","2146-12-27T00:00:00","2147-01-02T00:00:00","2147-04-14T00:00:00","2147-04-17T00:00:00","2147-05-01T00:00:00","2147-05-29T00:00:00","2147-08-28T00:00:00","2147-12-25T00:00:00","2147-12-26T00:00:00","2148-01-01T00:00:00","2148-04-05T00:00:00","2148-04-08T00:00:00","2148-05-06T00:00:00","2148-05-27T00:00:00","2148-08-26T00:00:00","2148-12-25T00:00:00","2148-12-26T00:00:00","2149-01-01T00:00:00","2149-03-28T00:00:00","2149-03-31T00:00:00","2149-05-05T00:00:00","2149-05-26T00:00:00","2149-08-25T00:00:00","2149-12-25T00:00:00","2149-12-26T00:00:00","2150-01-01T00:00:00","2150-04-10T00:00:00","2150-04-13T00:00:00","2150-05-04T00:00:00","2150-05-25T00:00:00","2150-08-31T00:00:00","2150-12-25T00:00:00","2150-12-28T00:00:00","2151-01-01T00:00:00","2151-04-02T00:00:00","2151-04-05T00:00:00","2151-05-03T00:00:00","2151-05-31T00:00:00","2151-08-30T00:00:00","2151-12-27T00:00:00","2151-12-28T00:00:00","2152-01-03T00:00:00","2152-04-21T00:00:00","2152-04-24T00:00:00","2152-05-01T00:00:00","2152-05-29T00:00:00","2152-08-28T00:00:00","2152-12-25T00:00:00","2152-12-26T00:00:00","2153-01-01T00:00:00","2153-04-13T00:00:00","2153-04-16T00:00:00","2153-05-07T00:00:00","2153-05-28T00:00:00","2153-08-27T00:00:00","2153-12-25T00:00:00","2153-12-26T00:00:00","2154-01-01T00:00:00","2154-03-29T00:00:00","2154-04-01T00:00:00","2154-05-06T00:00:00","2154-05-27T00:00:00","2154-08-26T00:00:00","2154-12-25T00:00:00","2154-12-26T00:00:00","2155-01-01T00:00:00","2155-04-18T00:00:00","2155-04-21T00:00:00","2155-05-05T00:00:00","2155-05-26T00:00:00","2155-08-25T00:00:00","2155-12-25T00:00:00","2155-12-26T00:00:00","2156-01-01T00:00:00","2156-04-09T00:00:00","2156-04-12T00:00:00","2156-05-03T00:00:00","2156-05-31T00:00:00","2156-08-30T00:00:00","2156-12-27T00:00:00","2156-12-28T00:00:00","2157-01-03T00:00:00","2157-03-25T00:00:00","2157-03-28T00:00:00","2157-05-02T00:00:00","2157-05-30T00:00:00","2157-08-29T00:00:00","2157-12-26T00:00:00","2157-12-27T00:00:00","2158-01-02T00:00:00","2158-04-14T00:00:00","2158-04-17T00:00:00","2158-05-01T00:00:00","2158-05-29T00:00:00","2158-08-28T00:00:00","2158-12-25T00:00:00","2158-12-26T00:00:00","2159-01-01T00:00:00","2159-04-06T00:00:00","2159-04-09T00:00:00","2159-05-07T00:00:00","2159-05-28T00:00:00","2159-08-27T00:00:00","2159-12-25T00:00:00","2159-12-26T00:00:00","2160-01-01T00:00:00","2160-03-21T00:00:00","2160-03-24T00:00:00","2160-05-05T00:00:00","2160-05-26T00:00:00","2160-08-25T00:00:00","2160-12-25T00:00:00","2160-12-26T00:00:00","2161-01-01T00:00:00","2161-04-10T00:00:00","2161-04-13T00:00:00","2161-05-04T00:00:00","2161-05-25T00:00:00","2161-08-31T00:00:00","2161-12-25T00:00:00","2161-12-28T00:00:00","2162-01-01T00:00:00","2162-04-02T00:00:00","2162-04-05T00:00:00","2162-05-03T00:00:00","2162-05-31T00:00:00","2162-08-30T00:00:00","2162-12-27T00:00:00","2162-12-28T00:00:00","2163-01-03T00:00:00","2163-04-22T00:00:00","2163-04-25T00:00:00","2163-05-02T00:00:00","2163-05-30T00:00:00","2163-08-29T00:00:00","2163-12-26T00:00:00","2163-12-27T00:00:00","2164-01-02T00:00:00","2164-04-06T00:00:00","2164-04-09T00:00:00","2164-05-07T00:00:00","2164-05-28T00:00:00","2164-08-27T00:00:00","2164-12-25T00:00:00","2164-12-26T00:00:00","2165-01-01T00:00:00","2165-03-29T00:00:00","2165-04-01T00:00:00","2165-05-06T00:00:00","2165-05-27T00:00:00","2165-08-26T00:00:00","2165-12-25T00:00:00","2165-12-26T00:00:00","2166-01-01T00:00:00","2166-04-18T00:00:00","2166-04-21T00:00:00","2166-05-05T00:00:00","2166-05-26T00:00:00","2166-08-25T00:00:00","2166-12-25T00:00:00","2166-12-26T00:00:00","2167-01-01T00:00:00","2167-04-03T00:00:00","2167-04-06T00:00:00","2167-05-04T00:00:00","2167-05-25T00:00:00","2167-08-31T00:00:00","2167-12-25T00:00:00","2167-12-28T00:00:00","2168-01-01T00:00:00","2168-03-25T00:00:00","2168-03-28T00:00:00","2168-05-02T00:00:00","2168-05-30T00:00:00","2168-08-29T00:00:00","2168-12-26T00:00:00","2168-12-27T00:00:00","2169-01-02T00:00:00","2169-04-14T00:00:00","2169-04-17T00:00:00","2169-05-01T00:00:00","2169-05-29T00:00:00","2169-08-28T00:00:00","2169-12-25T00:00:00","2169-12-26T00:00:00","2170-01-01T00:00:00","2170-03-30T00:00:00","2170-04-02T00:00:00","2170-05-07T00:00:00","2170-05-28T00:00:00","2170-08-27T00:00:00","2170-12-25T00:00:00","2170-12-26T00:00:00","2171-01-01T00:00:00","2171-04-19T00:00:00","2171-04-22T00:00:00","2171-05-06T00:00:00","2171-05-27T00:00:00","2171-08-26T00:00:00","2171-12-25T00:00:00","2171-12-26T00:00:00","2172-01-01T00:00:00","2172-04-10T00:00:00","2172-04-13T00:00:00","2172-05-04T00:00:00","2172-05-25T00:00:00","2172-08-31T00:00:00","2172-12-25T00:00:00","2172-12-28T00:00:00","2173-01-01T00:00:00","2173-04-02T00:00:00","2173-04-05T00:00:00","2173-05-03T00:00:00","2173-05-31T00:00:00","2173-08-30T00:00:00","2173-12-27T00:00:00","2173-12-28T00:00:00","2174-01-03T00:00:00","2174-04-15T00:00:00","2174-04-18T00:00:00","2174-05-02T00:00:00","2174-05-30T00:00:00","2174-08-29T00:00:00","2174-12-26T00:00:00","2174-12-27T00:00:00","2175-01-02T00:00:00","2175-04-07T00:00:00","2175-04-10T00:00:00","2175-05-01T00:00:00","2175-05-29T00:00:00","2175-08-28T00:00:00","2175-12-25T00:00:00","2175-12-26T00:00:00","2176-01-01T00:00:00","2176-03-29T00:00:00","2176-04-01T00:00:00","2176-05-06T00:00:00","2176-05-27T00:00:00","2176-08-26T00:00:00","2176-12-25T00:00:00","2176-12-26T00:00:00","2177-01-01T00:00:00","2177-04-18T00:00:00","2177-04-21T00:00:00","2177-05-05T00:00:00","2177-05-26T00:00:00","2177-08-25T00:00:00","2177-12-25T00:00:00","2177-12-26T00:00:00","2178-01-01T00:00:00","2178-04-03T00:00:00","2178-04-06T00:00:00","2178-05-04T00:00:00","2178-05-25T00:00:00","2178-08-31T00:00:00","2178-12-25T00:00:00","2178-12-28T00:00:00","2179-01-01T00:00:00","2179-03-26T00:00:00","2179-03-29T00:00:00","2179-05-03T00:00:00","2179-05-31T00:00:00","2179-08-30T00:00:00","2179-12-27T00:00:00","2179-12-28T00:00:00","2180-01-03T00:00:00","2180-04-14T00:00:00","2180-04-17T00:00:00","2180-05-01T00:00:00","2180-05-29T00:00:00","2180-08-28T00:00:00","2180-12-25T00:00:00","2180-12-26T00:00:00","2181-01-01T00:00:00","2181-03-30T00:00:00","2181-04-02T00:00:00","2181-05-07T00:00:00","2181-05-28T00:00:00","2181-08-27T00:00:00","2181-12-25T00:00:00","2181-12-26T00:00:00","2182-01-01T00:00:00","2182-04-19T00:00:00","2182-04-22T00:00:00","2182-05-06T00:00:00","2182-05-27T00:00:00","2182-08-26T00:00:00","2182-12-25T00:00:00","2182-12-26T00:00:00","2183-01-01T00:00:00","2183-04-11T00:00:00","2183-04-14T00:00:00","2183-05-05T00:00:00","2183-05-26T00:00:00","2183-08-25T00:00:00","2183-12-25T00:00:00","2183-12-26T00:00:00","2184-01-01T00:00:00","2184-03-26T00:00:00","2184-03-29T00:00:00","2184-05-03T00:00:00","2184-05-31T00:00:00","2184-08-30T00:00:00","2184-12-27T00:00:00","2184-12-28T00:00:00","2185-01-03T00:00:00","2185-04-15T00:00:00","2185-04-18T00:00:00","2185-05-02T00:00:00","2185-05-30T00:00:00","2185-08-29T00:00:00","2185-12-26T00:00:00","2185-12-27T00:00:00","2186-01-02T00:00:00","2186-04-07T00:00:00","2186-04-10T00:00:00","2186-05-01T00:00:00","2186-05-29T00:00:00","2186-08-28T00:00:00","2186-12-25T00:00:00","2186-12-26T00:00:00","2187-01-01T00:00:00","2187-03-23T00:00:00","2187-03-26T00:00:00","2187-05-07T00:00:00","2187-05-28T00:00:00","2187-08-27T00:00:00","2187-12-25T00:00:00","2187-12-26T00:00:00","2188-01-01T00:00:00","2188-04-11T00:00:00","2188-04-14T00:00:00","2188-05-05T00:00:00","2188-05-26T00:00:00","2188-08-25T00:00:00","2188-12-25T00:00:00","2188-12-26T00:00:00","2189-01-01T00:00:00","2189-04-03T00:00:00","2189-04-06T00:00:00","2189-05-04T00:00:00","2189-05-25T00:00:00","2189-08-31T00:00:00","2189-12-25T00:00:00","2189-12-28T00:00:00","2190-01-01T00:00:00","2190-04-23T00:00:00","2190-04-26T00:00:00","2190-05-03T00:00:00","2190-05-31T00:00:00","2190-08-30T00:00:00","2190-12-27T00:00:00","2190-12-28T00:00:00","2191-01-03T00:00:00","2191-04-08T00:00:00","2191-04-11T00:00:00","2191-05-02T00:00:00","2191-05-30T00:00:00","2191-08-29T00:00:00","2191-12-26T00:00:00","2191-12-27T00:00:00","2192-01-02T00:00:00","2192-03-30T00:00:00","2192-04-02T00:00:00","2192-05-07T00:00:00","2192-05-28T00:00:00","2192-08-27T00:00:00","2192-12-25T00:00:00","2192-12-26T00:00:00","2193-01-01T00:00:00","2193-04-19T00:00:00","2193-04-22T00:00:00","2193-05-06T00:00:00","2193-05-27T00:00:00","2193-08-26T00:00:00","2193-12-25T00:00:00","2193-12-26T00:00:00","2194-01-01T00:00:00","2194-04-04T00:00:00","2194-04-07T00:00:00","2194-05-05T00:00:00","2194-05-26T00:00:00","2194-08-25T00:00:00","2194-12-25T00:00:00","2194-12-26T00:00:00","2195-01-01T00:00:00","2195-03-27T00:00:00","2195-03-30T00:00:00","2195-05-04T00:00:00","2195-05-25T00:00:00","2195-08-31T00:00:00","2195-12-25T00:00:00","2195-12-28T00:00:00","2196-01-01T00:00:00","2196-04-15T00:00:00","2196-04-18T00:00:00","2196-05-02T00:00:00","2196-05-30T00:00:00","2196-08-29T00:00:00","2196-12-26T00:00:00","2196-12-27T00:00:00","2197-01-02T00:00:00","2197-04-07T00:00:00","2197-04-10T00:00:00","2197-05-01T00:00:00","2197-05-29T00:00:00","2197-08-28T00:00:00","2197-12-25T00:00:00","2197-12-26T00:00:00","2198-01-01T00:00:00","2198-03-23T00:00:00","2198-03-26T00:00:00","2198-05-07T00:00:00","2198-05-28T00:00:00","2198-08-27T00:00:00","2198-12-25T00:00:00","2198-12-26T00:00:00","2199-01-01T00:00:00","2199-04-12T00:00:00","2199-04-15T00:00:00","2199-05-06T00:00:00","2199-05-27T00:00:00","2199-08-26T00:00:00","2199-12-25T00:00:00","2199-12-26T00:00:00","2200-01-01T00:00:00","2200-04-04T00:00:00","2200-04-07T00:00:00","2200-05-05T00:00:00","2200-05-26T00:00:00","2200-08-25T00:00:00","2200-12-25T00:00:00","2200-12-26T00:00:00"],"week_mask":["Sat","Sun"]}}'

In [13]: named_cal.to_json()
Out[13]: '{"NamedCal":{"name":"ldn"}}'

These JSON strings will deserialize directly into the types from which they were constructed.

Calendar combinations#

Custom calendar combinations can be constructed with the UnionCal class. It requires a list of Cal objects to form the union of non-business dates, and another, secondary list, of associated settlement_calendars, to validate calculated dates against.

Combined calendars can also be constructed automatically using string parsing syntax. Comma separation forms a union of calendars. For example the appropriate calendar for a EUR/USD cross-currency swap is “tgt,nyc” for TARGET and New York.

The appropriate holiday calendar to use for a EURUSD FX instrument, such as spot determination is “tgt|fed”, which performs date manipulation under a TARGET calendar but enforces associated settlement against the Fed settlement calendar. The associated settlement calendar here is defined after the pipe operator.

# Combined calendar with no associated settlement calendar
In [14]: tgt_nyc = get_calendar("tgt,nyc")

In [15]: tgt_nyc.is_bus_day(dt(2009, 11, 11))
Out[15]: False

In [16]: tgt_nyc.is_settlement(dt(2009, 11, 11))
Out[16]: True

# TARGET calendar enforcing New York settlement
In [17]: tgt_nyc_settle = get_calendar("tgt|nyc")

In [18]: tgt_nyc_settle.is_bus_day(dt(2009, 11, 11))
Out[18]: True

In [19]: tgt_nyc_settle.is_settlement(dt(2009, 11, 11))
Out[19]: False

Adding Custom Calendars to Defaults#

Custom calendars can be added to the defaults object and this allows the get_calendar() method to access it via string representation in Instrument instantiation or or in other methods such as add_tenor().

Suppose we create a custom calendar which allows only Wednesdays to be business days. We can then use this calendar to derive IMM dates in a month, although this is obviously a pathological way of doing this, it is just shown for example purposes.

In [20]: cal = Cal(holidays=[], week_mask=[0, 1, 3, 4, 5, 6])

In [21]: defaults.calendars["wednesdays"] = cal

# The IMM date in March 2025 is..
In [22]: add_tenor(dt(2025, 3, 15), "0d", calendar="wednesdays", modifier="F")
Out[22]: datetime.datetime(2025, 3, 19, 0, 0)

Whenever the calendar argument is required for a method the string ‘wednesdays’ could now be freely used and would refer back to this object.

Day count fractions (DCFs)#

This module also contains a dcf() method for calculating day count fractions. Review the API documentation for specific calculation details. Current DCF conventions available are listed below:

In [23]: from rateslib.calendars import _DCF

In [24]: print(_DCF.keys())
dict_keys(['ACT365F', 'ACT365F+', 'ACT360', '30360', '360360', 'BONDBASIS', '30E360', 'EUROBONDBASIS', '30E360ISDA', 'ACTACT', 'ACTACTISDA', 'ACTACTICMA', 'ACTACTICMA_STUB365F', 'ACTACTISMA', 'ACTACTBOND', '1', '1+', 'BUS252'])