migration: establish exact preserved app baseline

This commit is contained in:
leefer
2026-07-30 23:51:48 +08:00
commit e4a9b2e647
389 changed files with 126625 additions and 0 deletions
+101
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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())
+124
View File
@@ -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
View File
@@ -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