From: KAWANISHI T. <to...@mm...> - 2003-01-27 15:47:21
|
Hi, there. On Mon, 27 Jan 2003 09:37:24 +0100 Luigi Ballabio <lui...@fa...> wrote: > Did you have a look at the other Tokyo holidays? Are they correct? I checked and fixed other Tokyo holidays, Dates of the hollidays , Marine day and Respect for the aged day has been changed since January 1st 2003. "Marine day" is third Monday July and "Respect for the Aged Day" is third Monday June since 2003. Until 2000, "Coming of Age day" and "Health and Sports Day" was not the day on the program but 15th January and 10th October respectively. "Marine day" is holiday since 1996. 23rd December is "Emperor's birthday" since 1988. So the code should be as follows. Please mail me when you have any questions. === #include <ql/Calendars/tokyo.hpp> namespace QuantLib { namespace Calendars { bool Tokyo::TokCalendarImpl::isBusinessDay(const Date& date) const { Weekday w = date.weekday(); Day d = date.dayOfMonth(); Month m = date.month(); Year y = date.year(); const double exact_vernal_equinox_time = 20.69115; // at 2000 const double exact_autumnal_equinox_time = 23.09; const double diff_per_year = 0.242194; double moving_amount = (y-2000)*diff_per_year; int number_of_leap_year = (y-2000)/4+(y-2000)/100-(y-2000)/400; const int ve = // vernal_equinox_day int(exact_vernal_equinox_time + moving_amount - number_of_leap_year); const int ae = // autumnal_equinox_day int(exact_autumnal_equinox_time + moving_amount - number_of_leap_year); if ((w == Saturday || w == Sunday) // New Year's Day || (d == 1 && m == January) // Bank Holiday || (d == 2 && m == January) // Bank Holiday || (d == 3 && m == January) // Coming of Age Day (2nd Monday in January) || ((d == 15 || (d = 16 && w == Monday)) && m == January && y <= 1999) || (w == Monday && (d >= 8 && d <= 14) && m == January && y >= 2000) // National Foundation Day || ((d == 11 || (d == 12 && w == Monday)) && m == February) // Vernal Equinox || ((d == ve || (d == (ve+1) && w == Monday)) && m == March) // Greenery Day || ((d == 29 || (d == 30 && w == Monday)) && m == April) // Constitution Memorial Day || (d == 3 && m == May) // Holiday for a Nation || (d == 4 && m == May) // Children's Day || ((d == 5 || (d == 6 && w == Monday)) && m == May) // Marine Day || ((d == 20 || (d == 21 && w == Monday)) && m == July && (y >= 1996 && y <= 2002)) || (w == Monday && (d >= 15 && d<= 21) && m == July && y >= 2003) // Respect for the Aged Day || ((d == 15 || (d == 16 && w == Monday)) && m == September && y <= 2002) || (w == Monday && (d >= 15 && d<= 21) && m == September && y >= 2003) // Autumnal Equinox || ((d == ae || (d == (ae+1) && w == Monday)) && m == September) // Holiday for a Nation // Between "Respect for the aged day" and "Autumnal Equinox" || (w == Tuesday && d+1 == ae && m == September && y >= 2003) // Health and Sports Day (2nd Monday in October) || ((d == 10 || (d == 11 && w == Monday)) && m == October && y <= 1999) || (w == Monday && (d >= 8 && d <= 14) && m == October && y >= 2000) // National Culture Day || ((d == 3 || (d == 4 && w == Monday)) && m == November) // Labor Thanksgiving Day || ((d == 23 || (d == 24 && w == Monday)) && m == November) // Emperor's Birthday || ((d == 23 || (d == 24 && w == Monday)) && m == December && y >= 1989) // Bank Holiday || (d == 31 && m == December)) return false; return true; } } } |