migration: establish exact preserved app baseline
This commit is contained in:
+101
@@ -0,0 +1,101 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import XiaoYun, LiuNian
|
||||
from ..util import LunarUtil
|
||||
|
||||
|
||||
class DaYun:
|
||||
"""
|
||||
大运
|
||||
"""
|
||||
|
||||
def __init__(self, yun, index: int):
|
||||
self.__yun = yun
|
||||
self.__lunar = yun.getLunar()
|
||||
self.__index = index
|
||||
birth_year = yun.getLunar().getSolar().getYear()
|
||||
year = yun.getStartSolar().getYear()
|
||||
if index < 1:
|
||||
self.__startYear = birth_year
|
||||
self.__startAge = 1
|
||||
self.__endYear = year - 1
|
||||
self.__endAge = year - birth_year
|
||||
else:
|
||||
add = (index - 1) * 10
|
||||
self.__startYear = year + add
|
||||
self.__startAge = self.__startYear - birth_year + 1
|
||||
self.__endYear = self.__startYear + 9
|
||||
self.__endAge = self.__startAge + 9
|
||||
|
||||
def getStartYear(self):
|
||||
return self.__startYear
|
||||
|
||||
def getEndYear(self):
|
||||
return self.__endYear
|
||||
|
||||
def getStartAge(self):
|
||||
return self.__startAge
|
||||
|
||||
def getEndAge(self):
|
||||
return self.__endAge
|
||||
|
||||
def getIndex(self):
|
||||
return self.__index
|
||||
|
||||
def getLunar(self):
|
||||
return self.__lunar
|
||||
|
||||
def getGanZhi(self):
|
||||
"""
|
||||
获取干支
|
||||
:return: 干支
|
||||
"""
|
||||
if self.__index < 1:
|
||||
return ""
|
||||
offset = LunarUtil.getJiaZiIndex(self.__lunar.getMonthInGanZhiExact())
|
||||
offset += self.__index if self.__yun.isForward() else -self.__index
|
||||
size = len(LunarUtil.JIA_ZI)
|
||||
if offset >= size:
|
||||
offset -= size
|
||||
if offset < 0:
|
||||
offset += size
|
||||
return LunarUtil.JIA_ZI[offset]
|
||||
|
||||
def getXun(self):
|
||||
"""
|
||||
获取所在旬
|
||||
:return: 旬
|
||||
"""
|
||||
return LunarUtil.getXun(self.getGanZhi())
|
||||
|
||||
def getXunKong(self):
|
||||
"""
|
||||
获取旬空(空亡)
|
||||
:return: 旬空(空亡)
|
||||
"""
|
||||
return LunarUtil.getXunKong(self.getGanZhi())
|
||||
|
||||
def getLiuNian(self, n=10):
|
||||
"""
|
||||
获取流年
|
||||
:param n: 轮数
|
||||
:return: 流年
|
||||
"""
|
||||
if self.__index < 1:
|
||||
n = self.__endYear - self.__startYear + 1
|
||||
liu_nian = []
|
||||
for i in range(0, n):
|
||||
liu_nian.append(LiuNian(self, i))
|
||||
return liu_nian
|
||||
|
||||
def getXiaoYun(self, n=10):
|
||||
"""
|
||||
获取小运
|
||||
:param n: 轮数
|
||||
:return: 小运
|
||||
"""
|
||||
if self.__index < 1:
|
||||
n = self.__endYear - self.__startYear + 1
|
||||
xiao_yun = []
|
||||
for i in range(0, n):
|
||||
xiao_yun.append(XiaoYun(self, i, self.__yun.isForward()))
|
||||
return xiao_yun
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import LiuYue
|
||||
from ..util import LunarUtil
|
||||
|
||||
|
||||
class LiuNian:
|
||||
"""
|
||||
流年
|
||||
"""
|
||||
|
||||
def __init__(self, da_yun, index):
|
||||
self.__daYun = da_yun
|
||||
self.__lunar = da_yun.getLunar()
|
||||
self.__index = index
|
||||
self.__year = da_yun.getStartYear() + index
|
||||
self.__age = da_yun.getStartAge() + index
|
||||
|
||||
def getIndex(self):
|
||||
return self.__index
|
||||
|
||||
def getYear(self):
|
||||
return self.__year
|
||||
|
||||
def getAge(self):
|
||||
return self.__age
|
||||
|
||||
def getGanZhi(self):
|
||||
"""
|
||||
获取干支
|
||||
:return: 干支
|
||||
"""
|
||||
offset = LunarUtil.getJiaZiIndex(self.__lunar.getJieQiTable()["立春"].getLunar().getYearInGanZhiExact()) + self.__index
|
||||
if self.__daYun.getIndex() > 0:
|
||||
offset += self.__daYun.getStartAge() - 1
|
||||
offset %= len(LunarUtil.JIA_ZI)
|
||||
return LunarUtil.JIA_ZI[offset]
|
||||
|
||||
def getXun(self):
|
||||
"""
|
||||
获取所在旬
|
||||
:return: 旬
|
||||
"""
|
||||
return LunarUtil.getXun(self.getGanZhi())
|
||||
|
||||
def getXunKong(self):
|
||||
"""
|
||||
获取旬空(空亡)
|
||||
:return: 旬空(空亡)
|
||||
"""
|
||||
return LunarUtil.getXunKong(self.getGanZhi())
|
||||
|
||||
def getLiuYue(self):
|
||||
"""
|
||||
获取流月
|
||||
:return: 流月
|
||||
"""
|
||||
n = 12
|
||||
liu_yue = []
|
||||
for i in range(0, n):
|
||||
liu_yue.append(LiuYue(self, i))
|
||||
return liu_yue
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from ..util import LunarUtil
|
||||
|
||||
|
||||
class LiuYue:
|
||||
"""
|
||||
流月
|
||||
"""
|
||||
|
||||
def __init__(self, liu_nian, index):
|
||||
self.__liuNian = liu_nian
|
||||
self.__index = index
|
||||
|
||||
def getIndex(self):
|
||||
return self.__index
|
||||
|
||||
def getMonthInChinese(self):
|
||||
"""
|
||||
获取中文的月
|
||||
:return: 中文月,如正
|
||||
"""
|
||||
return LunarUtil.MONTH[self.__index + 1]
|
||||
|
||||
def getGanZhi(self):
|
||||
"""
|
||||
获取干支
|
||||
<p>
|
||||
《五虎遁》
|
||||
甲己之年丙作首,
|
||||
乙庚之年戊为头,
|
||||
丙辛之年寻庚上,
|
||||
丁壬壬寅顺水流,
|
||||
若问戊癸何处走,
|
||||
甲寅之上好追求。
|
||||
:return: 干支
|
||||
"""
|
||||
offset = 0
|
||||
year_gan_zhi = self.__liuNian.getGanZhi()
|
||||
year_gan = year_gan_zhi[:1]
|
||||
if "甲" == year_gan or "己" == year_gan:
|
||||
offset = 2
|
||||
elif "乙" == year_gan or "庚" == year_gan:
|
||||
offset = 4
|
||||
elif "丙" == year_gan or "辛" == year_gan:
|
||||
offset = 6
|
||||
elif "丁" == year_gan or "壬" == year_gan:
|
||||
offset = 8
|
||||
gan = LunarUtil.GAN[(self.__index + offset) % 10 + 1]
|
||||
zhi = LunarUtil.ZHI[(self.__index + LunarUtil.BASE_MONTH_ZHI_INDEX) % 12 + 1]
|
||||
return gan + zhi
|
||||
|
||||
def getXun(self):
|
||||
"""
|
||||
获取所在旬
|
||||
:return: 旬
|
||||
"""
|
||||
return LunarUtil.getXun(self.getGanZhi())
|
||||
|
||||
def getXunKong(self):
|
||||
"""
|
||||
获取旬空(空亡)
|
||||
:return: 旬空(空亡)
|
||||
"""
|
||||
return LunarUtil.getXunKong(self.getGanZhi())
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from ..util import LunarUtil
|
||||
|
||||
|
||||
class XiaoYun:
|
||||
"""
|
||||
小运
|
||||
"""
|
||||
|
||||
def __init__(self, da_yun, index, forward):
|
||||
self.__daYun = da_yun
|
||||
self.__lunar = da_yun.getLunar()
|
||||
self.__index = index
|
||||
self.__year = da_yun.getStartYear() + index
|
||||
self.__age = da_yun.getStartAge() + index
|
||||
self.__forward = forward
|
||||
|
||||
def getIndex(self):
|
||||
return self.__index
|
||||
|
||||
def getYear(self):
|
||||
return self.__year
|
||||
|
||||
def getAge(self):
|
||||
return self.__age
|
||||
|
||||
def getGanZhi(self):
|
||||
"""
|
||||
获取干支
|
||||
:return: 干支
|
||||
"""
|
||||
offset = LunarUtil.getJiaZiIndex(self.__lunar.getTimeInGanZhi())
|
||||
add = self.__index + 1
|
||||
if self.__daYun.getIndex() > 0:
|
||||
add += self.__daYun.getStartAge() - 1
|
||||
offset += add if self.__forward else -add
|
||||
size = len(LunarUtil.JIA_ZI)
|
||||
while offset < 0:
|
||||
offset += size
|
||||
offset %= size
|
||||
return LunarUtil.JIA_ZI[offset]
|
||||
|
||||
def getXun(self):
|
||||
"""
|
||||
获取所在旬
|
||||
:return: 旬
|
||||
"""
|
||||
return LunarUtil.getXun(self.getGanZhi())
|
||||
|
||||
def getXunKong(self):
|
||||
"""
|
||||
获取旬空(空亡)
|
||||
:return: 旬空(空亡)
|
||||
"""
|
||||
return LunarUtil.getXunKong(self.getGanZhi())
|
||||
Vendored
+124
@@ -0,0 +1,124 @@
|
||||
# -*- 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
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from .LiuYue import LiuYue
|
||||
from .LiuNian import LiuNian
|
||||
from .XiaoYun import XiaoYun
|
||||
from .DaYun import DaYun
|
||||
from .Yun import Yun
|
||||
Reference in New Issue
Block a user