|
@@ -24,9 +24,8 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
#region 基础数据
|
|
|
|
|
|
private const int MinYear = 1900;
|
|
|
- private const int MaxYear = 2050;
|
|
|
+ private const int MaxYear = 2100;
|
|
|
private static readonly DateTime MinDay = new DateTime(1900, 1, 30);
|
|
|
- private static readonly DateTime MaxDay = new DateTime(2049, 12, 31);
|
|
|
private const int GanZhiStartYear = 1864; //干支计算起始年
|
|
|
private static readonly DateTime GanZhiStartDay = new DateTime(1899, 12, 22); //起始日
|
|
|
private const string HzNum = "零一二三四五六七八九";
|
|
@@ -37,164 +36,44 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
/// 来源于网上的农历数据
|
|
|
/// </summary>
|
|
|
/// <remarks>
|
|
|
- /// 数据结构如下,共使用17位数据
|
|
|
- /// 第17位:表示闰月天数,0表示29天 1表示30天
|
|
|
- /// 第16位-第5位(共12位)表示12个月,其中第16位表示第一月,如果该月为30天则为1,29天为0
|
|
|
- /// 第4位-第1位(共4位)表示闰月是哪个月,如果当年没有闰月,则置0
|
|
|
+ /// 数据结构如下,共使用17位数据<br/>
|
|
|
+ /// 说明如下:<br/>
|
|
|
+ ///1-4:判断当年是否为闰年,若为闰年,则为闰年的月份,反之为0;<br/>
|
|
|
+ ///5-16:为除了闰月外的正常月份是大月还是小月,1为30天,0为29天。(注意:1月对应第16位,2月对应第15位……12月对应第5位)<br/>
|
|
|
+ ///17-20: 表示闰月是大月还是小月,若为1,则为大月,若为0,则为小月。(注意:仅当存在闰月的情况下有意义)<br/>
|
|
|
+ /// -<br/>
|
|
|
+ ///举例说明:<br/>
|
|
|
+ ///例一:0x04bd8<br/>
|
|
|
+ ///对应二进制:0000 0100 1011 1101 1000<br/>
|
|
|
+ ///则表示当年有闰月8月,且闰月为小月29天<br/>
|
|
|
+ ///该年1-12月的天数为:29 30 29 29 30 29 30 29(闰月) 30 30 29 30<br/>
|
|
|
+ ///例二:0x04ae0<br/>
|
|
|
+ ///对应二进制:0000 0100 1010 1110 0000<br/>
|
|
|
+ ///则表示当年没有闰月<br/>
|
|
|
+ ///该年1-12月的天数为:29 30 29 29 30 29 30 29 30 30 30 29<br/>
|
|
|
+ ///补充闰月介绍:<br/>
|
|
|
+ ///闰月是阴阳历中为使历年平均长度接近会归年而增设的月。阴阳历以朔望月的长度(29.5306日)为一个月的平均值,全年12个月,同回归年(365.2422日)相差约10日21时,故需要置闰,三年闰一个月,五年闰二个月,十九年闰七个月。阴阳历以朔望月的长度(29.5306日)为一个月的平均值,全年12个月,同回归年(365.2422日)相差约10日21时,故需要置闰,三年闰一个月,五年闰二个月,十九年闰七个月。
|
|
|
///</remarks>
|
|
|
private static readonly int[] LunarDateArray =
|
|
|
{
|
|
|
- 0x04BD8,
|
|
|
- 0x04AE0,
|
|
|
- 0x0A570,
|
|
|
- 0x054D5,
|
|
|
- 0x0D260,
|
|
|
- 0x0D950,
|
|
|
- 0x16554,
|
|
|
- 0x056A0,
|
|
|
- 0x09AD0,
|
|
|
- 0x055D2,
|
|
|
- 0x04AE0,
|
|
|
- 0x0A5B6,
|
|
|
- 0x0A4D0,
|
|
|
- 0x0D250,
|
|
|
- 0x1D255,
|
|
|
- 0x0B540,
|
|
|
- 0x0D6A0,
|
|
|
- 0x0ADA2,
|
|
|
- 0x095B0,
|
|
|
- 0x14977,
|
|
|
- 0x04970,
|
|
|
- 0x0A4B0,
|
|
|
- 0x0B4B5,
|
|
|
- 0x06A50,
|
|
|
- 0x06D40,
|
|
|
- 0x1AB54,
|
|
|
- 0x02B60,
|
|
|
- 0x09570,
|
|
|
- 0x052F2,
|
|
|
- 0x04970,
|
|
|
- 0x06566,
|
|
|
- 0x0D4A0,
|
|
|
- 0x0EA50,
|
|
|
- 0x06E95,
|
|
|
- 0x05AD0,
|
|
|
- 0x02B60,
|
|
|
- 0x186E3,
|
|
|
- 0x092E0,
|
|
|
- 0x1C8D7,
|
|
|
- 0x0C950,
|
|
|
- 0x0D4A0,
|
|
|
- 0x1D8A6,
|
|
|
- 0x0B550,
|
|
|
- 0x056A0,
|
|
|
- 0x1A5B4,
|
|
|
- 0x025D0,
|
|
|
- 0x092D0,
|
|
|
- 0x0D2B2,
|
|
|
- 0x0A950,
|
|
|
- 0x0B557,
|
|
|
- 0x06CA0,
|
|
|
- 0x0B550,
|
|
|
- 0x15355,
|
|
|
- 0x04DA0,
|
|
|
- 0x0A5B0,
|
|
|
- 0x14573,
|
|
|
- 0x052B0,
|
|
|
- 0x0A9A8,
|
|
|
- 0x0E950,
|
|
|
- 0x06AA0,
|
|
|
- 0x0AEA6,
|
|
|
- 0x0AB50,
|
|
|
- 0x04B60,
|
|
|
- 0x0AAE4,
|
|
|
- 0x0A570,
|
|
|
- 0x05260,
|
|
|
- 0x0F263,
|
|
|
- 0x0D950,
|
|
|
- 0x05B57,
|
|
|
- 0x056A0,
|
|
|
- 0x096D0,
|
|
|
- 0x04DD5,
|
|
|
- 0x04AD0,
|
|
|
- 0x0A4D0,
|
|
|
- 0x0D4D4,
|
|
|
- 0x0D250,
|
|
|
- 0x0D558,
|
|
|
- 0x0B540,
|
|
|
- 0x0B6A0,
|
|
|
- 0x195A6,
|
|
|
- 0x095B0,
|
|
|
- 0x049B0,
|
|
|
- 0x0A974,
|
|
|
- 0x0A4B0,
|
|
|
- 0x0B27A,
|
|
|
- 0x06A50,
|
|
|
- 0x06D40,
|
|
|
- 0x0AF46,
|
|
|
- 0x0AB60,
|
|
|
- 0x09570,
|
|
|
- 0x04AF5,
|
|
|
- 0x04970,
|
|
|
- 0x064B0,
|
|
|
- 0x074A3,
|
|
|
- 0x0EA50,
|
|
|
- 0x06B58,
|
|
|
- 0x055C0,
|
|
|
- 0x0AB60,
|
|
|
- 0x096D5,
|
|
|
- 0x092E0,
|
|
|
- 0x0C960,
|
|
|
- 0x0D954,
|
|
|
- 0x0D4A0,
|
|
|
- 0x0DA50,
|
|
|
- 0x07552,
|
|
|
- 0x056A0,
|
|
|
- 0x0ABB7,
|
|
|
- 0x025D0,
|
|
|
- 0x092D0,
|
|
|
- 0x0CAB5,
|
|
|
- 0x0A950,
|
|
|
- 0x0B4A0,
|
|
|
- 0x0BAA4,
|
|
|
- 0x0AD50,
|
|
|
- 0x055D9,
|
|
|
- 0x04BA0,
|
|
|
- 0x0A5B0,
|
|
|
- 0x15176,
|
|
|
- 0x052B0,
|
|
|
- 0x0A930,
|
|
|
- 0x07954,
|
|
|
- 0x06AA0,
|
|
|
- 0x0AD50,
|
|
|
- 0x05B52,
|
|
|
- 0x04B60,
|
|
|
- 0x0A6E6,
|
|
|
- 0x0A4E0,
|
|
|
- 0x0D260,
|
|
|
- 0x0EA65,
|
|
|
- 0x0D530,
|
|
|
- 0x05AA0,
|
|
|
- 0x076A3,
|
|
|
- 0x096D0,
|
|
|
- 0x04BD7,
|
|
|
- 0x04AD0,
|
|
|
- 0x0A4D0,
|
|
|
- 0x1D0B6,
|
|
|
- 0x0D250,
|
|
|
- 0x0D520,
|
|
|
- 0x0DD45,
|
|
|
- 0x0B5A0,
|
|
|
- 0x056D0,
|
|
|
- 0x055B2,
|
|
|
- 0x049B0,
|
|
|
- 0x0A577,
|
|
|
- 0x0A4B0,
|
|
|
- 0x0AA50,
|
|
|
- 0x1B255,
|
|
|
- 0x06D20,
|
|
|
- 0x0ADA0,
|
|
|
- 0x14B63
|
|
|
+ 0x04BD8, 0x04AE0, 0x0A570, 0x054D5, 0x0D260, 0x0D950, 0x16554, 0x056A0, 0x09AD0, 0x055D2, 0x04AE0,
|
|
|
+ 0x0A5B6, 0x0A4D0, 0x0D250, 0x1D255, 0x0B540, 0x0D6A0, 0x0ADA2, 0x095B0, 0x14977, 0x04970, 0x0A4B0,
|
|
|
+ 0x0B4B5, 0x06A50, 0x06D40, 0x1AB54, 0x02B60, 0x09570, 0x052F2, 0x04970, 0x06566, 0x0D4A0, 0x0EA50,
|
|
|
+ 0x06E95, 0x05AD0, 0x02B60, 0x186E3, 0x092E0, 0x1C8D7, 0x0C950, 0x0D4A0, 0x1D8A6, 0x0B550, 0x056A0,
|
|
|
+ 0x1A5B4, 0x025D0, 0x092D0, 0x0D2B2, 0x0A950, 0x0B557, 0x06CA0, 0x0B550, 0x15355, 0x04DA0, 0x0A5B0,
|
|
|
+ 0x14573, 0x052B0, 0x0A9A8, 0x0E950, 0x06AA0, 0x0AEA6, 0x0AB50, 0x04B60, 0x0AAE4, 0x0A570, 0x05260,
|
|
|
+ 0x0F263, 0x0D950, 0x05B57, 0x056A0, 0x096D0, 0x04DD5, 0x04AD0, 0x0A4D0, 0x0D4D4, 0x0D250, 0x0D558,
|
|
|
+ 0x0B540, 0x0B6A0, 0x195A6, 0x095B0, 0x049B0, 0x0A974, 0x0A4B0, 0x0B27A, 0x06A50, 0x06D40, 0x0AF46,
|
|
|
+ 0x0AB60, 0x09570, 0x04AF5, 0x04970, 0x064B0, 0x074A3, 0x0EA50, 0x06B58, 0x055C0, 0x0AB60, 0x096D5,
|
|
|
+ 0x092E0, 0x0C960, 0x0D954, 0x0D4A0, 0x0DA50, 0x07552, 0x056A0, 0x0ABB7, 0x025D0, 0x092D0, 0x0CAB5,
|
|
|
+ 0x0A950, 0x0B4A0, 0x0BAA4, 0x0AD50, 0x055D9, 0x04BA0, 0x0A5B0, 0x15176, 0x052B0, 0x0A930, 0x07954,
|
|
|
+ 0x06AA0, 0x0AD50, 0x05B52, 0x04B60, 0x0A6E6, 0x0A4E0, 0x0D260, 0x0EA65, 0x0D530, 0x05AA0, 0x076A3,
|
|
|
+ 0x096D0, 0x04BD7, 0x04AD0, 0x0A4D0, 0x1D0B6, 0x0D250, 0x0D520, 0x0DD45, 0x0B5A0, 0x056D0, 0x055B2,
|
|
|
+ 0x049B0, 0x0A577, 0x0A4B0, 0x0AA50, 0x1B255, 0x06D20, 0x0ADA0, 0x14B63, 0x9370, 0x49f8, 0x4970,
|
|
|
+ 0x64b0, 0x168a6, 0xea50, 0x6aa0, 0x1a6c4, 0xaae0, 0x92e0, 0xd2e3, 0xc960, 0xd557, 0xd4a0, 0xda50,
|
|
|
+ 0x5d55, 0x56a0, 0xa6d0, 0x55d4, 0x52d0, 0xa9b8, 0xa950, 0xb4a0, 0xb6a6, 0xad50, 0x55a0, 0xaba4,
|
|
|
+ 0xa5b0, 0x52b0, 0xb273, 0x6930, 0x7337, 0x6aa0, 0xad50, 0x14b55, 0x4b60, 0xa570, 0x54e4, 0xd160,
|
|
|
+ 0xe968, 0xd520, 0xdaa0, 0x16aa6, 0x56d0, 0x4ae0, 0xa9d4, 0xa2d0, 0xd150, 0xf252, 0xd520
|
|
|
};
|
|
|
|
|
|
/// <summary>
|
|
@@ -202,49 +81,9 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
/// </summary>
|
|
|
private static readonly string[] ConstellationName =
|
|
|
{
|
|
|
- "白羊座",
|
|
|
- "金牛座",
|
|
|
- "双子座",
|
|
|
- "巨蟹座",
|
|
|
- "狮子座",
|
|
|
- "处女座",
|
|
|
- "天秤座",
|
|
|
- "天蝎座",
|
|
|
- "射手座",
|
|
|
- "摩羯座",
|
|
|
- "水瓶座",
|
|
|
- "双鱼座"
|
|
|
- };
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 二十四节气
|
|
|
- /// </summary>
|
|
|
- private static readonly string[] LunarHolidayName =
|
|
|
- {
|
|
|
- "小寒",
|
|
|
- "大寒",
|
|
|
- "立春",
|
|
|
- "雨水",
|
|
|
- "惊蛰",
|
|
|
- "春分",
|
|
|
- "清明",
|
|
|
- "谷雨",
|
|
|
- "立夏",
|
|
|
- "小满",
|
|
|
- "芒种",
|
|
|
- "夏至",
|
|
|
- "小暑",
|
|
|
- "大暑",
|
|
|
- "立秋",
|
|
|
- "处暑",
|
|
|
- "白露",
|
|
|
- "秋分",
|
|
|
- "寒露",
|
|
|
- "霜降",
|
|
|
- "立冬",
|
|
|
- "小雪",
|
|
|
- "大雪",
|
|
|
- "冬至"
|
|
|
+ "白羊座", "金牛座", "双子座", "巨蟹座",
|
|
|
+ "狮子座", "处女座", "天秤座", "天蝎座",
|
|
|
+ "射手座", "摩羯座", "水瓶座", "双鱼座"
|
|
|
};
|
|
|
|
|
|
/// <summary>
|
|
@@ -252,35 +91,11 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
/// </summary>
|
|
|
private static readonly string[] ChineseConstellationName =
|
|
|
{
|
|
|
- //四 五 六 日 一 二 三
|
|
|
- "角木蛟",
|
|
|
- "亢金龙",
|
|
|
- "女土蝠",
|
|
|
- "房日兔",
|
|
|
- "心月狐",
|
|
|
- "尾火虎",
|
|
|
- "箕水豹",
|
|
|
- "斗木獬",
|
|
|
- "牛金牛",
|
|
|
- "氐土貉",
|
|
|
- "虚日鼠",
|
|
|
- "危月燕",
|
|
|
- "室火猪",
|
|
|
- "壁水獝",
|
|
|
- "奎木狼",
|
|
|
- "娄金狗",
|
|
|
- "胃土彘",
|
|
|
- "昴日鸡",
|
|
|
- "毕月乌",
|
|
|
- "觜火猴",
|
|
|
- "参水猿",
|
|
|
- "井木犴",
|
|
|
- "鬼金羊",
|
|
|
- "柳土獐",
|
|
|
- "星日马",
|
|
|
- "张月鹿",
|
|
|
- "翼火蛇",
|
|
|
- "轸水蚓"
|
|
|
+ //四 五 六 日 一 二 三
|
|
|
+ "角木蛟", "亢金龙", "女土蝠", "房日兔", "心月狐", "尾火虎", "箕水豹",
|
|
|
+ "斗木獬", "牛金牛", "氐土貉", "虚日鼠", "危月燕", "室火猪", "壁水獝",
|
|
|
+ "奎木狼", "娄金狗", "胃土彘", "昴日鸡", "毕月乌", "觜火猴", "参水猿",
|
|
|
+ "井木犴", "鬼金羊", "柳土獐", "星日马", "张月鹿", "翼火蛇", "轸水蚓"
|
|
|
};
|
|
|
|
|
|
#region 节气数据
|
|
@@ -290,30 +105,10 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
/// </summary>
|
|
|
private static readonly string[] SolarTerm =
|
|
|
{
|
|
|
- "小寒",
|
|
|
- "大寒",
|
|
|
- "立春",
|
|
|
- "雨水",
|
|
|
- "惊蛰",
|
|
|
- "春分",
|
|
|
- "清明",
|
|
|
- "谷雨",
|
|
|
- "立夏",
|
|
|
- "小满",
|
|
|
- "芒种",
|
|
|
- "夏至",
|
|
|
- "小暑",
|
|
|
- "大暑",
|
|
|
- "立秋",
|
|
|
- "处暑",
|
|
|
- "白露",
|
|
|
- "秋分",
|
|
|
- "寒露",
|
|
|
- "霜降",
|
|
|
- "立冬",
|
|
|
- "小雪",
|
|
|
- "大雪",
|
|
|
- "冬至"
|
|
|
+ "小寒", "大寒", "立春", "雨水", "惊蛰", "春分",
|
|
|
+ "清明", "谷雨", "立夏", "小满", "芒种", "夏至",
|
|
|
+ "小暑", "大暑", "立秋", "处暑", "白露", "秋分",
|
|
|
+ "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"
|
|
|
};
|
|
|
|
|
|
private static readonly int[] STermInfo =
|
|
@@ -356,19 +151,7 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
|
|
|
private static readonly string[] MonthString =
|
|
|
{
|
|
|
- "出错",
|
|
|
- "正月",
|
|
|
- "二月",
|
|
|
- "三月",
|
|
|
- "四月",
|
|
|
- "五月",
|
|
|
- "六月",
|
|
|
- "七月",
|
|
|
- "八月",
|
|
|
- "九月",
|
|
|
- "十月",
|
|
|
- "十一月",
|
|
|
- "腊月"
|
|
|
+ "出错", "正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "冬月", "腊月"
|
|
|
};
|
|
|
|
|
|
#endregion
|
|
@@ -478,8 +261,13 @@ namespace Masuit.Tools.DateTimeExt
|
|
|
/// 用一个标准的公历日期来初使化
|
|
|
/// </summary>
|
|
|
/// <param name="dt"></param>
|
|
|
- public ChineseCalendar(DateTime dt)
|
|
|
+ public ChineseCalendar(in DateTime dt)
|
|
|
{
|
|
|
+ if (dt.Year > MaxYear)
|
|
|
+ {
|
|
|
+ throw new ChineseCalendarException("最大年份支持2100年");
|
|
|
+ }
|
|
|
+
|
|
|
int i;
|
|
|
Date = dt.Date;
|
|
|
_datetime = dt;
|