# -*- coding: utf-8 -*- from . import Lunar, TaoFestival from .util import LunarUtil, TaoUtil class Tao: """ 道历 """ BIRTH_YEAR = -2697 def __init__(self, lunar): self.__lunar = lunar @staticmethod def fromLunar(lunar): return Tao(lunar) @staticmethod def fromYmdHms(year, month, day, hour, minute, second): return Tao.fromLunar(Lunar.fromYmdHms(year + Tao.BIRTH_YEAR, month, day, hour, minute, second)) @staticmethod def fromYmd(year, month, day): return Tao.fromYmdHms(year, month, day, 0, 0, 0) def getLunar(self): return self.__lunar def getYear(self): return self.__lunar.getYear() - Tao.BIRTH_YEAR def getMonth(self): return self.__lunar.getMonth() def getDay(self): return self.__lunar.getDay() def getYearInChinese(self): y = str(self.getYear()) s = "" for i in range(0, len(y)): s += LunarUtil.NUMBER[ord(y[i]) - 48] return s def getMonthInChinese(self): return self.__lunar.getMonthInChinese() def getDayInChinese(self): return self.__lunar.getDayInChinese() def getFestivals(self): festivals = [] md = "%d-%d" % (self.getMonth(), self.getDay()) if md in TaoUtil.FESTIVAL: fs = TaoUtil.FESTIVAL[md] for f in fs: festivals.append(f) jq = self.__lunar.getJieQi() if "冬至" == jq: festivals.append(TaoFestival("元始天尊圣诞")) elif "夏至" == jq: festivals.append(TaoFestival("灵宝天尊圣诞")) # 八节日 if jq in TaoUtil.BA_JIE: festivals.append(TaoFestival(TaoUtil.BA_JIE[jq])) # 八会日 gz = self.__lunar.getDayInGanZhi() if gz in TaoUtil.BA_HUI: festivals.append(TaoFestival(TaoUtil.BA_HUI[gz])) return festivals def __isDayIn(self, days): md = "%d-%d" % (self.getMonth(), self.getDay()) for d in days: if md == d: return True return False def isDaySanHui(self): return self.__isDayIn(TaoUtil.SAN_HUI) def isDaySanYuan(self): return self.__isDayIn(TaoUtil.SAN_YUAN) def isDayBaJie(self): return self.__lunar.getJieQi() in TaoUtil.BA_JIE def isDayWuLa(self): return self.__isDayIn(TaoUtil.WU_LA) def isDayBaHui(self): return self.__lunar.getDayInGanZhi() in TaoUtil.BA_HUI def isDayMingWu(self): return "戊" == self.__lunar.getDayGan() def isDayAnWu(self): return self.__lunar.getDayZhi() == TaoUtil.AN_WU[abs(self.getMonth()) - 1] def isDayWu(self): return self.isDayMingWu() or self.isDayAnWu() def isDayTianShe(self): ret = False mz = self.__lunar.getMonthZhi() dgz = self.__lunar.getDayInGanZhi() if mz in "寅卯辰": if "戊寅" == dgz: ret = True elif mz in "巳午未": if "甲午" == dgz: ret = True elif mz in "申酉戌": if "戊申" == dgz: ret = True elif mz in "亥子丑": if "甲子" == dgz: ret = True return ret def __str__(self): return self.toString() def toString(self): return "%s年%s月%s" % (self.getYearInChinese(), self.getMonthInChinese(), self.getDayInChinese()) def toFullString(self): return "道歷%s年,天运%s年,%s月,%s日。%s月%s日,%s時。" % (self.getYearInChinese(), self.__lunar.getYearInGanZhi(), self.__lunar.getMonthInGanZhi(), self.__lunar.getDayInGanZhi(), self.getMonthInChinese(), self.getDayInChinese(), self.__lunar.getTimeZhi())