Calendars#
The rateslib.calendars
module generates holiday calendars so that
business days are well defined.
Summary#
Classes#
|
A business day calendar with a singular list of holidays. |
A wrapper for a UnionCal struct specified by a string representation. |
|
|
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#
|
Returns a calendar object either from an available set or a user defined input. |
|
Return an IMM date for a specified month. |
|
Add a tenor to a given date under specific modification rules and holiday calendar. |
|
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'])