125 lines
3.3 KiB
Python
125 lines
3.3 KiB
Python
# -*- 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
|