Spaces:
Running
Running
| # -*- coding: utf-8 -*- | |
| from . import Lunar, LunarMonth | |
| from .util import LunarUtil, FotoUtil | |
| class Foto: | |
| """ | |
| 佛历 | |
| """ | |
| DEAD_YEAR = -543 | |
| def __init__(self, lunar): | |
| self.__lunar = lunar | |
| def fromLunar(lunar): | |
| return Foto(lunar) | |
| def fromYmdHms(year, month, day, hour, minute, second): | |
| return Foto.fromLunar(Lunar.fromYmdHms(year + Foto.DEAD_YEAR - 1, month, day, hour, minute, second)) | |
| def fromYmd(year, month, day): | |
| return Foto.fromYmdHms(year, month, day, 0, 0, 0) | |
| def getLunar(self): | |
| return self.__lunar | |
| def getYear(self): | |
| sy = self.__lunar.getSolar().getYear() | |
| y = sy - Foto.DEAD_YEAR | |
| if sy == self.__lunar.getYear(): | |
| y += 1 | |
| return y | |
| 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" % (abs(self.getMonth()), self.getDay()) | |
| if md in FotoUtil.FESTIVAL: | |
| fs = FotoUtil.FESTIVAL[md] | |
| for f in fs: | |
| festivals.append(f) | |
| return festivals | |
| def getOtherFestivals(self): | |
| """ | |
| 获取纪念日 | |
| :return: 非正式的节日列表,如中元节 | |
| """ | |
| festivals = [] | |
| key = "%d-%d" % (self.getMonth(), self.getDay()) | |
| if key in FotoUtil.OTHER_FESTIVAL: | |
| for f in FotoUtil.OTHER_FESTIVAL[key]: | |
| festivals.append(f) | |
| return festivals | |
| def isMonthZhai(self): | |
| m = self.getMonth() | |
| return 1 == m or 5 == m or 9 == m | |
| def isDayYangGong(self): | |
| for f in self.getFestivals(): | |
| if "杨公忌" == f.getName(): | |
| return True | |
| return False | |
| def isDayZhaiShuoWang(self): | |
| d = self.getDay() | |
| return 1 == d or 15 == d | |
| def isDayZhaiSix(self): | |
| d = self.getDay() | |
| if 8 == d or 14 == d or 15 == d or 23 == d or 29 == d or 30 == d: | |
| return True | |
| elif 28 == d: | |
| m = LunarMonth.fromYm(self.__lunar.getYear(), self.getMonth()) | |
| return m is not None and 30 != m.getDayCount() | |
| return False | |
| def isDayZhaiTen(self): | |
| d = self.getDay() | |
| return 1 == d or 8 == d or 14 == d or 15 == d or 18 == d or 23 == d or 24 == d or 28 == d or 29 == d or 30 == d | |
| def isDayZhaiGuanYin(self): | |
| k = "%d-%d" % (self.getMonth(), self.getDay()) | |
| for d in FotoUtil.DAY_ZHAI_GUAN_YIN: | |
| if k == d: | |
| return True | |
| return False | |
| def getXiu(self): | |
| return FotoUtil.getXiu(self.getMonth(), self.getDay()) | |
| def getXiuLuck(self): | |
| return LunarUtil.XIU_LUCK[self.getXiu()] | |
| def getXiuSong(self): | |
| return LunarUtil.XIU_SONG[self.getXiu()] | |
| def getZheng(self): | |
| return LunarUtil.ZHENG[self.getXiu()] | |
| def getAnimal(self): | |
| return LunarUtil.ANIMAL[self.getXiu()] | |
| def getGong(self): | |
| return LunarUtil.GONG[self.getXiu()] | |
| def getShou(self): | |
| return LunarUtil.SHOU[self.getGong()] | |
| def __str__(self): | |
| return self.toString() | |
| def toString(self): | |
| return "%s年%s月%s" % (self.getYearInChinese(), self.getMonthInChinese(), self.getDayInChinese()) | |
| def toFullString(self): | |
| s = self.toString() | |
| for f in self.getFestivals(): | |
| s += " (%s)" % f | |
| return s | |