설명 없음
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.

Foto.cs 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Lunar.Util;
  6. // ReSharper disable InconsistentNaming
  7. // ReSharper disable IdentifierTypo
  8. // ReSharper disable MemberCanBePrivate.Global
  9. namespace Lunar
  10. {
  11. /// <summary>
  12. /// 佛历
  13. /// </summary>
  14. public class Foto
  15. {
  16. /// <summary>
  17. /// 佛涅磐年
  18. /// </summary>
  19. public const int DEAD_YEAR = -543;
  20. /// <summary>
  21. /// 阴历
  22. /// </summary>
  23. public Lunar Lunar { get; }
  24. /// <summary>
  25. /// 初始化
  26. /// </summary>
  27. /// <param name="lunar">阴历</param>
  28. public Foto(Lunar lunar)
  29. {
  30. Lunar = lunar;
  31. }
  32. /// <summary>
  33. /// 初始化
  34. /// </summary>
  35. /// <param name="lunar">阴历</param>
  36. /// <returns>佛历</returns>
  37. public static Foto FromLunar(Lunar lunar)
  38. {
  39. return new Foto(lunar);
  40. }
  41. /// <summary>
  42. /// 初始化
  43. /// </summary>
  44. /// <param name="lunarYear">阴历年</param>
  45. /// <param name="lunarMonth">阴历月</param>
  46. /// <param name="lunarDay">阴历日</param>
  47. /// <param name="hour">小时</param>
  48. /// <param name="minute">分钟</param>
  49. /// <param name="second">秒钟</param>
  50. /// <returns>佛历</returns>
  51. public static Foto FromYmdHms(int lunarYear, int lunarMonth, int lunarDay, int hour = 0, int minute = 0, int second = 0)
  52. {
  53. return FromLunar(Lunar.FromYmdHms(lunarYear + DEAD_YEAR - 1, lunarMonth, lunarDay, hour, minute, second));
  54. }
  55. /// <summary>
  56. /// 年
  57. /// </summary>
  58. public int Year
  59. {
  60. get
  61. {
  62. var sy = Lunar.Solar.Year;
  63. var y = sy - DEAD_YEAR;
  64. if (sy == Lunar.Year)
  65. {
  66. y++;
  67. }
  68. return y;
  69. }
  70. }
  71. /// <summary>
  72. /// 月
  73. /// </summary>
  74. public int Month => Lunar.Month;
  75. /// <summary>
  76. /// 日
  77. /// </summary>
  78. public int Day => Lunar.Day;
  79. /// <summary>
  80. /// 中文年
  81. /// </summary>
  82. public string YearInChinese
  83. {
  84. get
  85. {
  86. var y = Year.ToString().ToCharArray();
  87. var s = new StringBuilder();
  88. for (int i = 0, j = y.Length; i < j; i++)
  89. {
  90. s.Append(LunarUtil.NUMBER[y[i] - '0']);
  91. }
  92. return s.ToString();
  93. }
  94. }
  95. /// <summary>
  96. /// 中文月
  97. /// </summary>
  98. public string MonthInChinese => Lunar.MonthInChinese;
  99. /// <summary>
  100. /// 中文日
  101. /// </summary>
  102. public string DayInChinese => Lunar.DayInChinese;
  103. /// <summary>
  104. /// 因果犯忌
  105. /// </summary>
  106. public List<FotoFestival> Festivals
  107. {
  108. get
  109. {
  110. var l = new List<FotoFestival>();
  111. try
  112. {
  113. l.AddRange(FotoUtil.FESTIVAL[Math.Abs(Month) + "-" + Day]);
  114. }
  115. catch
  116. {
  117. // ignored
  118. }
  119. return l;
  120. }
  121. }
  122. /// <summary>
  123. /// 纪念日
  124. /// </summary>
  125. public List<string> OtherFestivals
  126. {
  127. get
  128. {
  129. var l = new List<string>();
  130. try
  131. {
  132. var fs = FotoUtil.OTHER_FESTIVAL[$"{Month}-{Day}"];
  133. l.AddRange(fs);
  134. }
  135. catch
  136. {
  137. // ignored
  138. }
  139. return l;
  140. }
  141. }
  142. /// <summary>
  143. /// 月斋
  144. /// </summary>
  145. public bool MonthZhai => Month == 1 || Month == 5 || Month == 9;
  146. /// <summary>
  147. /// 杨公忌日
  148. /// </summary>
  149. public bool DayYangGong
  150. {
  151. get
  152. {
  153. return Festivals.Any(f => "杨公忌".Equals(f.Name));
  154. }
  155. }
  156. /// <summary>
  157. /// 朔望斋日
  158. /// </summary>
  159. public bool DayZhaiShuoWang => Day == 1 || Day == 15;
  160. /// <summary>
  161. /// 六斋日
  162. /// </summary>
  163. public bool DayZhaiSix
  164. {
  165. get
  166. {
  167. switch (Day)
  168. {
  169. case 8:
  170. case 14:
  171. case 15:
  172. case 23:
  173. case 29:
  174. case 30:
  175. return true;
  176. case 28:
  177. {
  178. var m = LunarMonth.FromYm(Lunar.Year, Month);
  179. return null != m && 30 != m.DayCount;
  180. }
  181. default:
  182. return false;
  183. }
  184. }
  185. }
  186. /// <summary>
  187. /// 十斋日
  188. /// </summary>
  189. public bool DayZhaiTen => Day == 1 || Day == 8 || Day == 14 || Day == 15 || Day == 18 || Day == 23 || Day == 24 || Day == 28 || Day == 29 || Day == 30;
  190. /// <summary>
  191. /// 观音斋日
  192. /// </summary>
  193. public bool DayZhaiGuanYin
  194. {
  195. get
  196. {
  197. var k = $"{Month}-{Day}";
  198. return FotoUtil.DAY_ZHAI_GUAN_YIN.Any(d => k.Equals(d));
  199. }
  200. }
  201. /// <summary>
  202. /// 宿
  203. /// </summary>
  204. public string Xiu => FotoUtil.GetXiu(Month, Day);
  205. /// <summary>
  206. /// 宿吉凶
  207. /// </summary>
  208. public string XiuLuck => LunarUtil.XIU_LUCK[Xiu];
  209. /// <summary>
  210. /// 宿歌诀
  211. /// </summary>
  212. public string XiuSong => LunarUtil.XIU_SONG[Xiu];
  213. /// <summary>
  214. /// 政
  215. /// </summary>
  216. public string Zheng => LunarUtil.ZHENG[Xiu];
  217. /// <summary>
  218. /// 动物
  219. /// </summary>
  220. public string Animal => LunarUtil.ANIMAL[Xiu];
  221. /// <summary>
  222. /// 宫
  223. /// </summary>
  224. public string Gong => LunarUtil.GONG[Xiu];
  225. /// <summary>
  226. /// 兽
  227. /// </summary>
  228. public string Shou => LunarUtil.SHOU[Gong];
  229. /// <summary>
  230. /// 完整字符串输出
  231. /// </summary>
  232. public string FullString
  233. {
  234. get
  235. {
  236. var s = new StringBuilder();
  237. s.Append(ToString());
  238. foreach (var f in Festivals)
  239. {
  240. s.Append(" (");
  241. s.Append(f);
  242. s.Append(')');
  243. }
  244. return s.ToString();
  245. }
  246. }
  247. /// <inheritdoc />
  248. public override string ToString()
  249. {
  250. return $"{YearInChinese}年{MonthInChinese}月{DayInChinese}";
  251. }
  252. }
  253. }