Spaces:
Running
Running
| # -*- 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 | |