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 ? "上" : "下") + "半年";
}
}