using System; using System.Collections.Generic; using Lunar.Util; // ReSharper disable MemberCanBePrivate.Global namespace Lunar { /// /// 阳历月 /// public class SolarMonth { /// /// 年 /// public int Year { get; } /// /// 月 /// public int Month { get; } /// /// 默认日期 /// public SolarMonth(): this(DateTime.Now) { } /// /// 通过日期初始化 /// /// 日期 public SolarMonth(DateTime date): this(date.Year, date.Month) { } /// /// 通过年月初始化 /// /// 年 /// 月 public SolarMonth(int year, int month) { Year = year; Month = month; } /// /// 通过指定日期获取阳历月 /// /// 日期 /// 阳历月 public static SolarMonth FromDate(DateTime date) { return new SolarMonth(date); } /// /// 通过指定年月获取阳历月 /// /// 年 /// 月 /// 阳历月 public static SolarMonth FromYm(int year, int month) { return new SolarMonth(year, month); } /// /// 本月的阳历日期列表 /// public List Days { get { var l = new List(31); var d = new Solar(Year, Month, 1); l.Add(d); var days = SolarUtil.GetDaysOfMonth(Year, Month); for (var i = 1; i < days; i++) { l.Add(d.Next(i)); } return l; } } /// /// 获取本月的阳历周列表 /// /// 星期几作为一周的开始,1234560分别代表星期一至星期天 /// 周列表 public List GetWeeks(int start) { var l = new List(); var week = SolarWeek.FromYmd(Year, Month, 1, start); while (true) { l.Add(week); week = week.Next(1, false); var firstDay = week.FirstDay; if (firstDay.Year > Year || firstDay.Month > Month) { break; } } return l; } /// /// 获取往后推几个月的阳历月,如果要往前推,则月数用负数 /// /// 月数 /// 阳历月 public SolarMonth Next(int months) { var n = months < 0 ? -1 : 1; var m = Math.Abs(months); var y = Year + m / 12 * n; m = Month + m % 12 * n; if (m > 12) { m -= 12; y++; } else if (m < 1) { m += 12; y--; } return new SolarMonth(y, m); } /// public override string ToString() { return Year + "-" + Month; } /// /// 完整字符串输出 /// public string FullString => Year + "年" + Month + "月"; } }