using System; using System.Collections.Generic; // ReSharper disable InconsistentNaming // ReSharper disable MemberCanBePrivate.Global namespace Lunar { /// /// 阳历半年 /// public class SolarHalfYear { /// /// 年 /// private int Year { get; } /// /// 月 /// private int Month { get; } /// /// 半年的月数 /// public const int MONTH_COUNT = 6; /// /// 默认当前日期 /// public SolarHalfYear(): this(DateTime.Now) { } /// /// 通过日期初始化 /// /// 日期 public SolarHalfYear(DateTime date): this(date.Year, date.Month) { } /// /// 通过年月初始化 /// /// 年 /// 月 public SolarHalfYear(int year, int month) { Year = year; Month = month; } /// /// 通过指定日期获取阳历半年 /// /// 日期 /// 阳历半年 public static SolarHalfYear FromDate(DateTime date) { return new SolarHalfYear(date); } /// /// 通过指定年月获取阳历半年 /// /// 年 /// 月 /// 阳历半年 public static SolarHalfYear FromYm(int year, int month) { return new SolarHalfYear(year, month); } /// /// 半年序号,从1开始 /// public int Index => (int)Math.Ceiling(Month * 1D / MONTH_COUNT); /// /// 半年推移 /// /// 推移的半年数,负数为倒推 /// 推移后的半年 public SolarHalfYear Next(int halfYears) { var m = SolarMonth.FromYm(Year, Month).Next(MONTH_COUNT * halfYears); return new SolarHalfYear(m.Year, m.Month); } /// /// 获取本半年的月份 /// /// 本半年的月份列表 public List Months { get { var l = new List(); var index = Index - 1; for (var i = 0; i < MONTH_COUNT; i++) { l.Add(new SolarMonth(Year, MONTH_COUNT * index + i + 1)); } return l; } } /// public override string ToString() { return Year + "." + Index; } /// /// 完整字符串输出 /// public string FullString => Year + "年" + (Index == 1 ? "上" : "下") + "半年"; } }