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 ; }