tradecatlabs's picture
deploy FateCat HF Space free web workbench
acb2cec verified
Raw
History Blame Contribute Delete
5.11 kB
# -*- coding: utf-8 -*-
from . import NineStar
from .util import LunarUtil
class LunarTime:
"""
时辰
"""
def __init__(self, lunar_year, lunar_month, lunar_day, hour, minute, second):
from . import Lunar
self.__lunar = Lunar.fromYmdHms(lunar_year, lunar_month, lunar_day, hour, minute, second)
self.__zhiIndex = LunarUtil.getTimeZhiIndex("%02d:%02d" % (hour, minute))
self.__ganIndex = (self.__lunar.getDayGanIndexExact() % 5 * 2 + self.__zhiIndex) % 10
@staticmethod
def fromYmdHms(lunar_year, lunar_month, lunar_day, hour, minute, second):
return LunarTime(lunar_year, lunar_month, lunar_day, hour, minute, second)
def getGan(self):
return LunarUtil.GAN[self.__ganIndex + 1]
def getZhi(self):
return LunarUtil.ZHI[self.__zhiIndex + 1]
def getGanZhi(self):
return "%s%s" % (self.getGan(), self.getZhi())
def getShengXiao(self):
return LunarUtil.SHENGXIAO[self.__zhiIndex + 1]
def getPositionXi(self):
return LunarUtil.POSITION_XI[self.__ganIndex + 1]
def getPositionXiDesc(self):
return LunarUtil.POSITION_DESC[self.getPositionXi()]
def getPositionYangGui(self):
return LunarUtil.POSITION_YANG_GUI[self.__ganIndex + 1]
def getPositionYangGuiDesc(self):
return LunarUtil.POSITION_DESC[self.getPositionYangGui()]
def getPositionYinGui(self):
return LunarUtil.POSITION_YIN_GUI[self.__ganIndex + 1]
def getPositionYinGuiDesc(self):
return LunarUtil.POSITION_DESC[self.getPositionYinGui()]
def getPositionFu(self, sect=2):
return (LunarUtil.POSITION_FU if 1 == sect else LunarUtil.POSITION_FU_2)[self.__ganIndex + 1]
def getPositionFuDesc(self, sect=2):
return LunarUtil.POSITION_DESC[self.getPositionFu(sect)]
def getPositionCai(self):
return LunarUtil.POSITION_CAI[self.__ganIndex + 1]
def getPositionCaiDesc(self):
return LunarUtil.POSITION_DESC[self.getPositionCai()]
def getChong(self):
return LunarUtil.CHONG[self.__zhiIndex]
def getChongGan(self):
return LunarUtil.CHONG_GAN[self.__ganIndex]
def getChongGanTie(self):
return LunarUtil.CHONG_GAN_TIE[self.__ganIndex]
def getChongShengXiao(self):
chong = self.getChong()
for i in range(0, len(LunarUtil.ZHI)):
if LunarUtil.ZHI[i] == chong:
return LunarUtil.SHENGXIAO[i]
return ""
def getChongDesc(self):
return "(" + self.getChongGan() + self.getChong() + ")" + self.getChongShengXiao()
def getSha(self):
return LunarUtil.SHA[self.getZhi()]
def getNaYin(self):
return LunarUtil.NAYIN[self.getGanZhi()]
def getTianShen(self):
return LunarUtil.TIAN_SHEN[(self.__zhiIndex + LunarUtil.ZHI_TIAN_SHEN_OFFSET[self.__lunar.getDayZhiExact()]) % 12 + 1]
def getTianShenType(self):
return LunarUtil.TIAN_SHEN_TYPE[self.getTianShen()]
def getTianShenLuck(self):
return LunarUtil.TIAN_SHEN_TYPE_LUCK[self.getTianShenType()]
def getYi(self):
"""
获取时宜
:return: 宜
"""
return LunarUtil.getTimeYi(self.__lunar.getDayInGanZhiExact(), self.getGanZhi())
def getJi(self):
"""
获取时忌
:return: 忌
"""
return LunarUtil.getTimeJi(self.__lunar.getDayInGanZhiExact(), self.getGanZhi())
def getNineStar(self):
solar_ymd = self.__lunar.getSolar().toYmd()
jie_qi = self.__lunar.getJieQiTable()
asc = False
if jie_qi["冬至"] <= solar_ymd < jie_qi["夏至"]:
asc = True
start = 7 if asc else 3
day_zhi = self.__lunar.getDayZhi()
if day_zhi in "子午卯酉":
start = 1 if asc else 9
elif day_zhi in "辰戌丑未":
start = 4 if asc else 6
index = start + self.__zhiIndex - 1 if asc else start - self.__zhiIndex - 1
if index > 8:
index -= 9
if index < 0:
index += 9
return NineStar.fromIndex(index)
def getGanIndex(self):
return self.__ganIndex
def getZhiIndex(self):
return self.__zhiIndex
def __str__(self):
return self.toString()
def toString(self):
return self.getGanZhi()
def getXun(self):
"""
获取时辰所在旬
:return: 旬
"""
return LunarUtil.getXun(self.getGanZhi())
def getXunKong(self):
"""
获取值时空亡
:return: 空亡(旬空)
"""
return LunarUtil.getXunKong(self.getGanZhi())
def getMinHm(self):
hour = self.__lunar.getHour()
if hour < 1:
return "00:00"
elif hour > 22:
return "23:00"
return "%02d:00" % (hour - 1 if hour % 2 == 0 else hour)
def getMaxHm(self):
hour = self.__lunar.getHour()
if hour < 1:
return "00:59"
elif hour > 22:
return "23:59"
return "%02d:59" % (hour + 1 if hour % 2 != 0 else hour)