self.year =year
self.month =month
self.day =day
self.weekday=weekday
self.gan =gan
self.zhi =zhi
solar1st = Date(0, 0, 30, weekday=2) #Wednesday, January 31, 1900
lunar1st = Date(0, 0, 0, weekday=2, gan=6, zhi=0)
#Wednesday, First day, First month, 1900, 庚子年
def error(msg):
print 'Error:', msg; exit(0)
def isSolarLeapYear (year):
year=year+1900
return (year%4 == 0) and (year%100 != 0) or (year%400 == 0)
baseYear=1201 - 1900
# in fact, real baseYear=1201. In order to ease calculation of
# leap years. real baseYear must conform to:
# realBaseYear%4==1 and realBaseYear%400==1.
# Assert realBaseYear < solar1st.year .
# Compute the number of days from the Solar First Date
# month=0 means January, ...
def solarDaysFromBaseYear(d): #d is a Date class
delta = d.year - baseYear
offset = delta*365 + delta/4 - delta/100 + delta/400
for i in range(d.month):
offset += daysInSolarMonth[i];
if d.month>1 and isSolarLeapYear(d.year):
offset += 1
offset += d.day
## print '___', year, month, day, 'offset=', offset ########
return offset
# Compute the number of days from the Solar First Date
# month=0 means January, ..., year=0 means 1900, ...
def solarDaysFromFirstDate (d): #d is a Date class
return solarDaysFromBaseYear (d) - solarDaysFromBaseYear (solar1st)
def calcLunarDaysPerMonth(iYear):
code = yearCode[iYear]
leapMonth = code&0xf #leapMonth==0 means no lunar leap month
code >>= 4
for iMonth in range(12):
yearInfo[iYear].monthDays[11-iMonth] = lunarMonthDays [code&0x1]
code >>= 1
if leapMonth>0:
yearInfo[iYear].leapMonth = leapMonth-1
yearInfo[iYear].monthDays.insert (leapMonth,
lunarMonthDays [code & 0x1])
def calcAllLunarYearsInfo():
for iYear in range(yearsCoded):
calcLunarDaysPerMonth (iYear)
for iMonth in range(13):










