123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using Lunar.Util;
- // ReSharper disable IdentifierTypo
- // ReSharper disable MemberCanBePrivate.Global
- // ReSharper disable UnusedAutoPropertyAccessor.Global
-
- namespace Lunar.EightChar
- {
- /// <summary>
- /// 大运
- /// </summary>
- public class DaYun
- {
- /// <summary>
- /// 开始年(含)
- /// </summary>
- public int StartYear { get; }
-
- /// <summary>
- /// 结束年(含)
- /// </summary>
- public int EndYear { get; }
-
- /// <summary>
- /// 开始年龄(含)
- /// </summary>
- public int StartAge { get; }
-
- /// <summary>
- /// 结束年龄(含)
- /// </summary>
- public int EndAge { get; }
-
- /// <summary>
- /// 序数,0-9
- /// </summary>
- public int Index { get; }
-
- /// <summary>
- /// 运
- /// </summary>
- public Yun Yun { get; }
-
- /// <summary>
- /// 阴历
- /// </summary>
- public Lunar Lunar { get; }
-
- /// <summary>
- /// 从运和序数初始化
- /// </summary>
- /// <param name="yun">运</param>
- /// <param name="index">序数</param>
- public DaYun(Yun yun, int index)
- {
- Yun = yun;
- Lunar = yun.Lunar;
- Index = index;
- var birthYear = Lunar.Solar.Year;
- var year = yun.StartSolar.Year;
- if (index < 1)
- {
- StartYear = birthYear;
- StartAge = 1;
- EndYear = year - 1;
- EndAge = year - birthYear;
- }
- else
- {
- var add = (index - 1) * 10;
- StartYear = year + add;
- StartAge = StartYear - birthYear + 1;
- EndYear = StartYear + 9;
- EndAge = StartAge + 9;
- }
- }
-
- /// <summary>
- /// 获取干支
- /// </summary>
- /// <returns>干支</returns>
- public string GanZhi
- {
- get
- {
- if (Index < 1)
- {
- return "";
- }
- var offset = LunarUtil.GetJiaZiIndex(Lunar.MonthInGanZhiExact);
- offset += Yun.Forward ? Index : -Index;
- var size = LunarUtil.JIA_ZI.Length;
- if (offset >= size)
- {
- offset -= size;
- }
- if (offset < 0)
- {
- offset += size;
- }
- return LunarUtil.JIA_ZI[offset];
- }
- }
-
- /// <summary>
- /// 旬
- /// </summary>
- public string Xun => LunarUtil.GetXun(GanZhi);
-
- /// <summary>
- /// 旬空(空亡)
- /// </summary>
- public string XunKong => LunarUtil.GetXunKong(GanZhi);
-
- /// <summary>
- /// 获取流年
- /// </summary>
- /// <param name="n">轮数</param>
- /// <returns>流年</returns>
- public LiuNian[] GetLiuNian(int n = 10)
- {
- if (Index < 1)
- {
- n = EndYear - StartYear + 1;
- }
- var l = new LiuNian[n];
- for (var i = 0; i < n; ++i)
- {
- l[i] = new LiuNian(this, i);
- }
- return l;
- }
-
- /// <summary>
- /// 获取小运
- /// </summary>
- /// <param name="n">轮数</param>
- /// <returns>小运</returns>
- public XiaoYun[] GetXiaoYun(int n = 10)
- {
- if (Index < 1)
- {
- n = EndYear - StartYear + 1;
- }
- var l = new XiaoYun[n];
- for (var i = 0; i < n; ++i)
- {
- l[i] = new XiaoYun(this, i, Yun.Forward);
- }
- return l;
- }
-
- }
-
- }
|