Files
xiaobai-review/vendor/lunar_python/eightchar/Yun.py

125 lines
3.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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