tradecatlabs's picture
deploy FateCat HF Space free web workbench
acb2cec verified
Raw
History Blame Contribute Delete
3.42 kB
# -*- coding: utf-8 -*-
from . import DaYun
from ..util import LunarUtil
class Yun:
"""
"""
def __init__(self, eight_char, gender, sect=1):
self.__lunar = eight_char.getLunar()
self.__gender = gender
yang = 0 == self.__lunar.getYearGanIndexExact() % 2
man = 1 == gender
self.__forward = (yang and man) or (not yang and not man)
self.__compute_start(sect)
def __compute_start(self, sect):
"""
起运计算
"""
prev_jie = self.__lunar.getPrevJie()
next_jie = self.__lunar.getNextJie()
current = self.__lunar.getSolar()
start = current if self.__forward else prev_jie.getSolar()
end = next_jie.getSolar() if self.__forward else current
hour = 0
if 2 == sect:
minutes = end.subtractMinute(start)
year = int(minutes / 4320)
minutes -= year * 4320
month = int(minutes / 360)
minutes -= month * 360
day = int(minutes / 12)
minutes -= day * 12
hour = minutes * 2
else:
end_time_zhi_index = 11 if end.getHour() == 23 else LunarUtil.getTimeZhiIndex(end.toYmdHms()[11: 16])
start_time_zhi_index = 11 if start.getHour() == 23 else LunarUtil.getTimeZhiIndex(start.toYmdHms()[11: 16])
# 时辰差
hour_diff = end_time_zhi_index - start_time_zhi_index
day_diff = end.subtract(start)
if hour_diff < 0:
hour_diff += 12
day_diff -= 1
month_diff = int(hour_diff * 10 / 30)
month = day_diff * 4 + month_diff
day = hour_diff * 10 - month_diff * 30
year = int(month / 12)
month = month - year * 12
self.__startYear = year
self.__startMonth = month
self.__startDay = day
self.__startHour = hour
def getGender(self):
"""
获取性别
:return: 性别(1男 , 0女)
"""
return self.__gender
def getStartYear(self):
"""
获取起运年数
:return: 起运年数
"""
return self.__startYear
def getStartMonth(self):
"""
获取起运月数
:return: 起运月数
"""
return self.__startMonth
def getStartDay(self):
"""
获取起运天数
:return: 起运天数
"""
return self.__startDay
def getStartHour(self):
"""
获取起运小时数
:return: 起运小时数
"""
return self.__startHour
def isForward(self):
"""
是否顺推
:return: true/false
"""
return self.__forward
def getLunar(self):
return self.__lunar
def getStartSolar(self):
"""
获取起运的阳历日期
:return: 阳历日期
"""
solar = self.__lunar.getSolar()
solar = solar.nextYear(self.__startYear)
solar = solar.nextMonth(self.__startMonth)
solar = solar.next(self.__startDay)
return solar.nextHour(self.__startHour)
def getDaYun(self, n: int = 10):
"""
获取大运
:param n: 轮数
:return: 大运
"""
da_yun = []
for i in range(0, n):
da_yun.append(DaYun(self, i))
return da_yun