Sin descripción
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DaYun.cs 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using Lunar.Util;
  2. // ReSharper disable IdentifierTypo
  3. // ReSharper disable MemberCanBePrivate.Global
  4. // ReSharper disable UnusedAutoPropertyAccessor.Global
  5. namespace Lunar.EightChar
  6. {
  7. /// <summary>
  8. /// 大运
  9. /// </summary>
  10. public class DaYun
  11. {
  12. /// <summary>
  13. /// 开始年(含)
  14. /// </summary>
  15. public int StartYear { get; }
  16. /// <summary>
  17. /// 结束年(含)
  18. /// </summary>
  19. public int EndYear { get; }
  20. /// <summary>
  21. /// 开始年龄(含)
  22. /// </summary>
  23. public int StartAge { get; }
  24. /// <summary>
  25. /// 结束年龄(含)
  26. /// </summary>
  27. public int EndAge { get; }
  28. /// <summary>
  29. /// 序数,0-9
  30. /// </summary>
  31. public int Index { get; }
  32. /// <summary>
  33. /// 运
  34. /// </summary>
  35. public Yun Yun { get; }
  36. /// <summary>
  37. /// 阴历
  38. /// </summary>
  39. public Lunar Lunar { get; }
  40. /// <summary>
  41. /// 从运和序数初始化
  42. /// </summary>
  43. /// <param name="yun">运</param>
  44. /// <param name="index">序数</param>
  45. public DaYun(Yun yun, int index)
  46. {
  47. Yun = yun;
  48. Lunar = yun.Lunar;
  49. Index = index;
  50. var birthYear = Lunar.Solar.Year;
  51. var year = yun.StartSolar.Year;
  52. if (index < 1)
  53. {
  54. StartYear = birthYear;
  55. StartAge = 1;
  56. EndYear = year - 1;
  57. EndAge = year - birthYear;
  58. }
  59. else
  60. {
  61. var add = (index - 1) * 10;
  62. StartYear = year + add;
  63. StartAge = StartYear - birthYear + 1;
  64. EndYear = StartYear + 9;
  65. EndAge = StartAge + 9;
  66. }
  67. }
  68. /// <summary>
  69. /// 获取干支
  70. /// </summary>
  71. /// <returns>干支</returns>
  72. public string GanZhi
  73. {
  74. get
  75. {
  76. if (Index < 1)
  77. {
  78. return "";
  79. }
  80. var offset = LunarUtil.GetJiaZiIndex(Lunar.MonthInGanZhiExact);
  81. offset += Yun.Forward ? Index : -Index;
  82. var size = LunarUtil.JIA_ZI.Length;
  83. if (offset >= size)
  84. {
  85. offset -= size;
  86. }
  87. if (offset < 0)
  88. {
  89. offset += size;
  90. }
  91. return LunarUtil.JIA_ZI[offset];
  92. }
  93. }
  94. /// <summary>
  95. /// 旬
  96. /// </summary>
  97. public string Xun => LunarUtil.GetXun(GanZhi);
  98. /// <summary>
  99. /// 旬空(空亡)
  100. /// </summary>
  101. public string XunKong => LunarUtil.GetXunKong(GanZhi);
  102. /// <summary>
  103. /// 获取流年
  104. /// </summary>
  105. /// <param name="n">轮数</param>
  106. /// <returns>流年</returns>
  107. public LiuNian[] GetLiuNian(int n = 10)
  108. {
  109. if (Index < 1)
  110. {
  111. n = EndYear - StartYear + 1;
  112. }
  113. var l = new LiuNian[n];
  114. for (var i = 0; i < n; ++i)
  115. {
  116. l[i] = new LiuNian(this, i);
  117. }
  118. return l;
  119. }
  120. /// <summary>
  121. /// 获取小运
  122. /// </summary>
  123. /// <param name="n">轮数</param>
  124. /// <returns>小运</returns>
  125. public XiaoYun[] GetXiaoYun(int n = 10)
  126. {
  127. if (Index < 1)
  128. {
  129. n = EndYear - StartYear + 1;
  130. }
  131. var l = new XiaoYun[n];
  132. for (var i = 0; i < n; ++i)
  133. {
  134. l[i] = new XiaoYun(this, i, Yun.Forward);
  135. }
  136. return l;
  137. }
  138. }
  139. }