Browse Source

农历支持到2100年

懒得勤快 5 years ago
parent
commit
0185345d89

+ 55 - 267
Masuit.Tools.Abstractions/DateTimeExt/ChineseCalendar.cs

@@ -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;

+ 3 - 3
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -7,7 +7,7 @@
     <LangVersion>8.0</LangVersion>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
     <CodeAnalysisRuleSet />
-    <Version>2.3.2.1</Version>
+    <Version>2.3.2.2</Version>
     <Authors>懒得勤快</Authors>
     <Description>Masuit.Tools基础公共库</Description>
     <Copyright>懒得勤快,长空X</Copyright>
@@ -20,9 +20,9 @@
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
     <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
-    <FileVersion>2.3.2.1</FileVersion>
+    <FileVersion>2.3.2.2</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.3.2.1</AssemblyVersion>
+    <AssemblyVersion>2.3.2.2</AssemblyVersion>
     <PackageLicenseUrl>https://github.com/ldqk/Masuit.Tools/blob/master/LICENSE</PackageLicenseUrl>
   </PropertyGroup>
 

+ 3 - 3
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -20,10 +20,10 @@
     <UserSecretsId>830c282f-f7c1-42be-8651-4cd06ac8e73f</UserSecretsId>
     <RepositoryType>Github</RepositoryType>
     <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
-    <Version>2.3.2.1</Version>
-    <FileVersion>2.3.2.1</FileVersion>
+    <Version>2.3.2.2</Version>
+    <FileVersion>2.3.2.2</FileVersion>
     <Company>masuit.com</Company>
-    <AssemblyVersion>2.3.2.1</AssemblyVersion>
+    <AssemblyVersion>2.3.2.2</AssemblyVersion>
     <Authors>懒得勤快X</Authors>
     <RepositoryUrl>https://github.com/ldqk/Masuit.Tools</RepositoryUrl>
   </PropertyGroup>

BIN
Masuit.Tools/Properties/AssemblyInfo.cs


+ 1 - 1
Masuit.Tools/package.nuspec

@@ -4,7 +4,7 @@
     <!--*-->
     <id>Masuit.Tools.Net</id>
     <!--*-->
-    <version>2.3.2.1</version>
+    <version>2.3.2.2</version>
     <title>Masuit.Tools</title>
     <!--*-->
     <authors>masuit.com</authors>