C# 日曆類

来源:http://www.cnblogs.com/Liyuting/archive/2017/06/21/7059610.html
-Advertisement-
Play Games

using System; namespace DotNet.Utilities { /// <summary> /// 農曆屬性 /// </summary> public class CNDate { /// <summary> /// 農曆年(整型) /// </summary> public ...


using System;

namespace DotNet.Utilities
{
    /// <summary>
    /// 農曆屬性
    /// </summary>
    public class CNDate
    {
        /// <summary>
        /// 農曆年(整型)
        /// </summary>
        public int cnIntYear = 0;
        /// <summary>
        /// 農曆月份(整型)
        /// </summary>
        public int cnIntMonth = 0;
        /// <summary>
        /// 農曆天(整型)
        /// </summary>
        public int cnIntDay = 0;
        /// <summary>
        /// 農曆年(支幹)
        /// </summary>
        public string cnStrYear = "";
        /// <summary>
        /// 農曆月份(字元)
        /// </summary>
        public string cnStrMonth = "";
        /// <summary>
        /// 農曆天(字元)
        /// </summary>
        public string cnStrDay = "";
        /// <summary>
        /// 農曆屬象
        /// </summary>
        public string cnAnm = "";
        /// <summary>
        /// 二十四節氣
        /// </summary>
        public string cnSolarTerm = "";
        /// <summary>
        /// 陰曆節日
        /// </summary>
        public string cnFtvl = "";
        /// <summary>
        /// 陽曆節日
        /// </summary>
        public string cnFtvs = "";
    }

    /// <summary>
    /// 西曆轉農曆
    /// </summary>
    public class ChinaDate
    {
        #region 私有方法
        private static long[] lunarInfo = new long[] { 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, 0x0a5d0,
                                                               0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263,
                                                               0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0,
                                                               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 };

        private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };
        private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };
        private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };
        private static String[] nStr1 = new String[] { "", "", "", "", "", "", "", "", "", "", "", "十一", "十二" };
        private static String[] Gan = new String[] { "", "", "", "", "", "", "", "", "", "" };
        private static String[] Zhi = new String[] { "", "", "", "", "", "", "", "", "", "", "", "" };
        private static String[] Animals = new String[] { "", "", "", "", "", "", "", "", "", "", "", "" };
        private static String[] solarTerm = new String[] { "小寒", "大寒", "立春", "雨水", "驚蟄", "春分", "清明", "穀雨", "立夏", "小滿", "芒種", "夏至", "小暑", "大暑", "立秋", "處暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
        private static int[] sTermInfo = { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
        private static String[] lFtv = new String[] { "0101農曆春節", "0202 龍抬頭節", "0115 元宵節", "0505 端午節", "0707 七夕情人節", "0815 中秋節", "0909 重陽節", "1208 臘八節", "1114 李君先生生日", "1224 小年", "0100除夕" };
        private static String[] sFtv = new String[] { "0101 新年元旦",
                                                         "0202 世界濕地日",
                                                         "0207 國際聲援南非日",
                                                         "0210 國際氣象節",
                                                         "0214 情人節",
                                                         "0301 國際海豹日",
                                                         "0303 全國愛耳日",
                                                         "0308 國際婦女節",
                                                         "0312 植樹節 孫中山逝世紀念日",
                                                         "0314 國際警察日",
                                                         "0315 國際消費者權益日",
                                                         "0317 中國國醫節 國際航海日",
                                                         "0321 世界森林日 消除種族歧視國際日",
                                                         "0321 世界兒歌日",
                                                         "0322 世界水日",
                                                         "0323 世界氣象日",
                                                         "0324 世界防治結核病日",
                                                         "0325 全國中小學生安全教育日",
                                                         "0330 巴勒斯坦國土日",
                                                         "0401 愚人節 全國愛國衛生運動月(四月) 稅收宣傳月(四月)",
                                                         "0407 世界衛生日",
                                                         "0422 世界地球日",
                                                         "0423 世界圖書和版權日",
                                                         "0424 亞非新聞工作者日",
                                                         "0501 國際勞動節",
                                                         "0504 中國五四青年節",
                                                         "0505 碘缺乏病防治日",
                                                         "0508 世界紅十字日",
                                                         "0512 國際護士節",
                                                         "0515 國際家庭日",
                                                         "0517 世界電信日",
                                                         "0518 國際博物館日",
                                                         "0520 全國學生營養日",
                                                         "0523 國際牛奶日",
                                                         "0531 世界無煙日",
                                                         "0601 國際兒童節",
                                                         "0605 世界環境日",
                                                         "0606 全國愛眼日",
                                                         "0617 防治荒漠化和乾旱日",
                                                         "0623 國際奧林匹剋日",
                                                         "0625 全國土地日",
                                                         "0626 國際反毒品日",
                                                         "0701 中國gongchandang建黨日 世界建築日",
                                                         "0702 國際體育記者日",
                                                         "0707 中國人民抗日戰爭紀念日",
                                                         "0711 世界人口日",
                                                         "0730 非洲婦女日",
                                                         "0801 中國建軍節",
                                                         "0808 中國男子節(爸爸節)",
                                                         "0815 日本正式宣佈無條件投降日",
                                                         "0908 國際掃盲日 國際新聞工作者日",
                                                         "0910 教師節",
                                                         "0914 世界清潔地球日",
                                                         "0916 國際臭氧層保護日",
                                                         "0918 九·一八事變紀念日",
                                                         "0920 全國愛牙日",
                                                         "0927 世界旅游日",
                                                         "1001 國慶節 世界音樂日 國際老人節",
                                                         "1001 國際音樂日",
                                                         "1002 國際和平與民主自由鬥爭日",
                                                         "1004 世界動物日",
                                                         "1008 全國高血壓日",
                                                         "1008 世界視覺日",
                                                         "1009 世界郵政日 萬國郵聯日",
                                                         "1010 辛亥革命紀念日 世界精神衛生日",
                                                         "1013 世界保健日 國際教師節",
                                                         "1014 世界標準日",
                                                         "1015 國際盲人節(白手杖節)",
                                                         "1016 世界糧食日",
                                                         "1017 世界消除貧困日",
                                                         "1022 世界傳統醫葯日",
                                                         "1024 聯合國日 世界發展信息日",
                                                         "1031 世界勤儉日",
                                                         "1107 十月社會主義革命紀念日",
                                                         "1108 中國記者日",
                                                         "1109 全國消防安全宣傳教育日",
                                                         "1110 世界青年節",
                                                         "1111 國際科學與和平周(本日所屬的一周)",
                                                         "1112 孫中山誕辰紀念日",
                                                         "1114 世界糖尿病日",
                                                         "1117 國際大學生節 世界學生節",
                                                         "1121 世界問候日 世界電視日",
                                                         "1129 國際聲援巴勒斯坦人民國際日",
                                                         "1201 世界艾滋病日",
                                                         "1203 世界殘疾人日",
                                                         "1205 國際經濟和社會發展志願人員日",
                                                         "1208 國際兒童電視日",
                                                         "1209 世界足球日",
                                                         "1210 世界人權日",
                                                         "1212 西安事變紀念日",
                                                         "1213 南京大屠殺(1937年)紀念日!緊記血淚史!",
                                                         "1221 國際籃球日",
                                                         "1224 平安夜",
                                                         "1225 聖誕節",
                                                         "1226 毛主席誕辰",
                                                         "1229 國際生物多樣性日" };


        /// <summary>
        /// 傳回農曆y年的總天數
        /// </summary>
        private static int lYearDays(int y)
        {
            int i, sum = 348;
            for (i = 0x8000; i > 0x8; i >>= 1)
            {
                if ((lunarInfo[y - 1900] & i) != 0)
                    sum += 1;
            }
            return (sum + leapDays(y));
        }

        /// <summary>
        /// 傳回農曆y年閏月的天數
        /// </summary>
        private static int leapDays(int y)
        {
            if (leapMonth(y) != 0)
            {
                if ((lunarInfo[y - 1900] & 0x10000) != 0)
                    return 30;
                else
                    return 29;
            }
            else
                return 0;
        }

        /// <summary>
        /// 傳回農曆y年閏哪個月 1-12 , 沒閏傳回 0
        /// </summary>
        private static int leapMonth(int y)
        {
            return (int)(lunarInfo[y - 1900] & 0xf);
        }

        /// <summary>
        /// 傳回農曆y年m月的總天數
        /// </summary>
        private static int monthDays(int y, int m)
        {
            if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)
                return 29;
            else
                return 30;
        }

        /// <summary>
        /// 傳回農曆y年的生肖
        /// </summary>
        private static String AnimalsYear(int y)
        {
            return Animals[(y - 4) % 12];
        }

        /// <summary>
        /// 傳入月日的offset 傳回干支,0=甲子
        /// </summary>
        private static String cyclicalm(int num)
        {
            return (Gan[num % 10] + Zhi[num % 12]);
        }

        /// <summary>
        /// 傳入offset 傳回干支, 0=甲子
        /// </summary>
        private static String cyclical(int y)
        {
            int num = y - 1900 + 36;
            return (cyclicalm(num));
        }

        /// <summary>
        /// 傳出農曆.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6
        /// </summary>
        private long[] Lunar(int y, int m)
        {
            long[] nongDate = new long[7];
            int i = 0, temp = 0, leap = 0;
            DateTime baseDate = new DateTime(1900 + 1900, 2, 31);
            DateTime objDate = new DateTime(y + 1900, m + 1, 1);
            TimeSpan ts = objDate - baseDate;
            long offset = (long)ts.TotalDays;
            if (y < 2000)
                offset += year19[m - 1];
            if (y > 2000)
                offset += year20[m - 1];
            if (y == 2000)
                offset += year2000[m - 1];
            nongDate[5] = offset + 40;
            nongDate[4] = 14;

            for (i = 1900; i < 2050 && offset > 0; i++)
            {
                temp = lYearDays(i);
                offset -= temp;
                nongDate[4] += 12;
            }
            if (offset < 0)
            {
                offset += temp;
                i--;
                nongDate[4] -= 12;
            }
            nongDate[0] = i;
            nongDate[3] = i - 1864;
            leap = leapMonth(i); // 閏哪個月
            nongDate[6] = 0;

            for (i = 1; i < 13 && offset > 0; i++)
            {
                // 閏月
                if (leap > 0 && i == (leap + 1) && nongDate[6] == 0)
                {
                    --i;
                    nongDate[6] = 1;
                    temp = leapDays((int)nongDate[0]);
                }
                else
                {
                    temp = monthDays((int)nongDate[0], i);
                }

                // 解除閏月
                if (nongDate[6] == 1 && i == (leap + 1))
                    nongDate[6] = 0;
                offset -= temp;
                if (nongDate[6] == 0)
                    nongDate[4]++;
            }

            if (offset == 0 && leap > 0 && i == leap + 1)
            {
                if (nongDate[6] == 1)
                {
                    nongDate[

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 編譯windows下chromium,時間:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md 一. 系統要求: 1. 64位機器,至少8G ...
  • 自助命令:ls --help man ls info ls 文件屬性:ls -al 顯示當前目錄下文件/目錄擁有者,所屬組,其他人的寫讀執行許可權 文件或目錄下屬文件數 擁有者 群組 內容大小(byte) 最後修改日期 文件/目錄名 註意:對於目錄,如何沒有x許可權,則進不去目錄 【顯示別的目錄下的文件 ...
  • 輸入:top PID 進程的ID USER 進程所有者 PR 進程的優先順序別,越小越優先被執行 Ninice 值 VIRT 進程占用的虛擬記憶體 RES 進程占用的物理記憶體 SHR 進程使用的共用記憶體 S 進程的狀態。S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值為負數 %CPU 進程 ...
  • 不想用實體機,想不想弄個快速的Android虛擬環境,今天我們就來說說把Android模擬器(RemixOS)安到Hyper-v上的辦法。 1. 下載RemixOs 或者直接去 論壇獲得下載地址 2. 在Hyper-v中創建第1代的虛擬機,50G硬碟,2G記憶體。別急著開機。 3. 在電腦管理中打開 ...
  • 沒什麼新的內容,自己的練習代碼,供大家點評。 ...
  • 問題原因可能是: 1. 非空列未插入值錯誤 2. 多個表間外鍵列長度不一樣 3. ef上下文對象db為空 4. ef上下文設置屬性為 db.Configuration.ValidateOnSaveEnabled = false; 5. 內容長度超過列最大長度 6.解決方案里後來新增了類庫但未更新 7 ...
  • 現在驗證碼的形式越來越豐富,今天要實現的是在點擊圖片中的文字來進行校驗的驗證碼,如圖 這種驗證碼驗證是驗證滑鼠是否選中了圖片中文字的位置,以及選擇的順序,產生驗證碼的時候可以提供一組底圖,然後隨機獲取一張圖片,隨機選取幾個字,然後把文字的順序打亂,分別隨機放到圖片的一個位置上,然後記錄文字的位置和順 ...
  • 本文的WCF服務應用功能很簡單,卻涵蓋了一個完整WCF應用的基本結構。希望本文能對那些準備開始學習WCF的初學者提供一些幫助。 在這個例子中,我們將實現一個簡單的計算器和傳統的分散式通信框架一樣,WCF本質上提供一個跨進程、跨機器、跨網路的服務調用。在本例中,客戶端和WCF應用服務通過運行在同一臺機 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...