| Return Type | Function name | Arguments |
|---|---|---|
| unsigned int | IsHoliday | (hzSDate&,unsigned int,) |
Declared in file: hzCron.h
Defined in file : hzCron.cpp
Function Logic:
Function body:
unsigned int IsHoliday (hzSDate& date, unsigned int holFlags)
{
_hzfunc(__func__) ;
static hzMapM<hzSDate,uint32_t> hols ;
static hzSet<uint32_t> hol_year ;
hzXDate moon ;
hzXDate limt ;
hzSDate test ;
uint32_t Lo ;
uint32_t Hi ;
uint32_t theday = 0;
uint32_t nIndex ;
if (!holFlags)
holFlags = HZ_PUBHOL_ALLUK ;
if (!hol_year.Exists(date.Year()))
{
hol_year.Insert(date.Year()) ;
test.SetDate(date.Year(), 1,1);
hols.Insert(test, HZ_PUBHOL_NEWYEAR) ;
if (test.Dow() == 5)
test += 2;
if (test.Dow() == 6)
test += 1;
hols.Insert(test, HZ_PUBHOL_LUE_NEWYEAR) ;
moon.SetDateTime("20120109083006") ;
limt.SetDate(date.Year(), 3,21);
limt.SetTime(0,0,0);
for (; moon <&eq; limt ; moon.altdate(SECOND, 2541298));
for (; moon.Dow() != 6; moon.altdate(DAY, 1));
test.SetDate(date.Year(), moon.Month(), moon.Day()) ;
test -= 2; hols.Insert(test, HZ_PUBHOL_GOOD_FRIDAY) ;
test += 2; hols.Insert(test, HZ_PUBHOL_EASTER_SUNDAY) ;
test += 1; hols.Insert(test, HZ_PUBHOL_EASTER_MONDAY) ;
test.SetDate(date.Year(), 5,1);
if (test.Dow() == 5)
test += 2;
if (test.Dow() == 6)
test += 1;
hols.Insert(test, HZ_PUBHOL_MAYDAY) ;
test.SetDate(date.Year(), 5,31);
for (; test.Dow() ; test -= 1);
hols.Insert(test, HZ_PUBHOL_SPRING) ;
test.SetDate(date.Year(), 5,31);
for (; test.Dow() ; test -= 1);
hols.Insert(test, HZ_PUBHOL_SUMMER) ;
test.SetDate(date.Year(), 12,25);
hols.Insert(test, HZ_PUBHOL_XMAS) ;
if (test.Dow() == 5)
test += 2;
if (test.Dow() == 6)
test += 1;
hols.Insert(test, HZ_PUBHOL_LUE_XMAS) ;
test.SetDate(date.Year(), 12,26);
hols.Insert(test, HZ_PUBHOL_BOXING) ;
if (test.Dow() == 5)
test += 2;
if (test.Dow() == 6)
test += 1;
hols.Insert(test, HZ_PUBHOL_LUE_BOXING) ;
}
Lo = hols.First(date) ;
if (Lo < 0)
return false ;
Hi = hols.Last(date) ;
for (nIndex = Lo ; nIndex <&eq; Hi ; nIndex++)
theday |= hols.GetObj(nIndex) ;
return theday ;
}