簡單的日期轉換

来源:http://www.cnblogs.com/Lucky201671/archive/2016/07/01/5633760.html
-Advertisement-
Play Games

來源:威客百科 本文地址:baike.renwuyi.com/2015-04/9181.html 轉載請註明出處。 ...


 

private void button1_Click(object sender, EventArgs e){
               DateTime nDate = Convert.ToDateTime(dateTimePicker1.Text); //當前需要轉換的日期
               string jrDate = ChinaDate.GetChinaHoliday(nDate); //獲取農曆節日
               string jrMonth = ChinaDate.GetMonth(nDate); //獲取農曆月份
               string jrDay = ChinaDate.GetDay(nDate); //獲取農曆日期            
               DateTime jrSDate = ChinaDate.GetSunYearDate(nDate); //陽曆轉陰曆  
               string[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
               string week = weekdays[Convert.ToInt32(nDate.DayOfWeek)];
               this.textBox1.Text = jrSDate.ToString();     
        }
    
        /// <summary>
        /// 農曆與陰曆之間相互轉化工具類
        /// </summary>
        public class ChinaDate
        {
            #region 農曆信息獲取
            private static ChineseLunisolarCalendar china = new ChineseLunisolarCalendar();
            private static Hashtable gHoliday = new Hashtable();
            private static Hashtable nHoliday = new Hashtable();
            private static string[] JQ = { "小寒", "大寒", "立春", "雨水", "驚蟄", "春分", "清明", "穀雨", "立夏", "小滿", "芒種", "夏至", "小暑", "大暑", "立秋", "處暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
            private static int[] JQData = { 0, 21208, 43467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };

            static ChinaDate(){
                //西曆節日
                gHoliday.Add("0101", "元旦");
                gHoliday.Add("0214", "情人節");
                gHoliday.Add("0305", "雷鋒日");
                gHoliday.Add("0308", "婦女節");
                gHoliday.Add("0312", "植樹節");
                gHoliday.Add("0315", "消費者權益日");
                gHoliday.Add("0401", "愚人節");
                gHoliday.Add("0501", "勞動節");
                gHoliday.Add("0504", "青年節");
                gHoliday.Add("0601", "兒童節");
                gHoliday.Add("0701", "建黨節");
                gHoliday.Add("0801", "建軍節");
                gHoliday.Add("0910", "教師節");
                gHoliday.Add("1001", "國慶節");
                gHoliday.Add("1224", "平安夜");
                gHoliday.Add("1225", "聖誕節");
                //農曆節日
                nHoliday.Add("0101", "春節");
                nHoliday.Add("0115", "元宵節");
                nHoliday.Add("0505", "端午節");
                nHoliday.Add("0815", "中秋節");
                nHoliday.Add("0909", "重陽節");
                nHoliday.Add("1208", "臘八節");
            }

            /// <summary>
            /// 獲取農曆
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetChinaDate(DateTime dt){
                if (dt > china.MaxSupportedDateTime || dt < china.MinSupportedDateTime){
                    //日期範圍:1901 年 2 月 19 日 - 2101 年 1 月 28 日
                    throw new Exception(string.Format("日期超出範圍!必須在{0}到{1}之間!", china.MinSupportedDateTime.ToString("yyyy-MM-dd"), china.MaxSupportedDateTime.ToString("yyyy-MM-dd")));
                }
                string str = string.Format("{0} {1}{2}", GetYear(dt), GetMonth(dt), GetDay(dt));
                string strJQ = GetSolarTerm(dt);
                if (strJQ != ""){
                    str += " (" + strJQ + ")";
                }
                string strHoliday = GetHoliday(dt);
                if (strHoliday != ""){
                    str += " " + strHoliday;

                }
                string strChinaHoliday = GetChinaHoliday(dt);
                if (strChinaHoliday != ""){
                    str += " " + strChinaHoliday;
                }
                return str;
            }

            /// <summary>
            /// 獲取農曆年份
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetYear(DateTime dt)
            {
                int yearIndex = china.GetSexagenaryYear(dt);
                string yearTG = " 甲乙丙丁戊己庚辛壬癸";
                string yearDZ = " 子醜寅卯辰巳午未申酉戌亥";
                string yearSX = " 鼠牛虎兔龍蛇馬羊猴雞狗豬";
                int year = china.GetYear(dt);
                int yTG = china.GetCelestialStem(yearIndex);
                int yDZ = china.GetTerrestrialBranch(yearIndex);
                string str = string.Format("[{1}]{2}{3}{0}", year, yearSX[yDZ], yearTG[yTG], yearDZ[yDZ]);
                return str;
            }

            /// <summary>
            /// 獲取農曆月份
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetMonth(DateTime dt){
                int year = china.GetYear(dt);
                int iMonth = china.GetMonth(dt);
                int leapMonth = china.GetLeapMonth(year);
                bool isLeapMonth = iMonth == leapMonth;
                if (leapMonth != 0 && iMonth >= leapMonth){
                    iMonth--;
                }
                string szText = "正二三四五六七八九十";
                string strMonth = isLeapMonth ? "" : "";
                if (iMonth <= 10){
                    strMonth += szText.Substring(iMonth - 1, 1);
                }
                else if (iMonth == 11){
                    strMonth += "十一";
                }
                else{
                    strMonth += "";
                }
                return strMonth + "";
            }

            /// <summary>
            /// 獲取農曆日期
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetDay(DateTime dt){
                int iDay = china.GetDayOfMonth(dt);
                string szText1 = "初十廿三";
                string szText2 = "一二三四五六七八九十";
                string strDay;
                if (iDay == 20){
                    strDay = "二十";
                }
                else if (iDay == 30){
                    strDay = "三十";
                }
                else{
                   strDay = szText1.Substring((iDay - 1) / 10, 1);
                   strDay = strDay + szText2.Substring((iDay - 1) % 10, 1);
                }
                return strDay;
            }

            /// <summary>
            /// 獲取節氣
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetSolarTerm(DateTime dt){
                DateTime dtBase = new DateTime(1900, 1, 6, 2, 5, 0);
                DateTime dtNew;
                double num;
                int y;
                string strReturn = "";
                y = dt.Year;
                for (int i = 1; i <= 24; i++){
                    num = 525948.76 * (y - 1900) + JQData[i - 1];
                    dtNew = dtBase.AddMinutes(num);
                    if (dtNew.DayOfYear == dt.DayOfYear){
                        strReturn = JQ[i - 1];
                    }
                }
                return strReturn;
            }

            /// <summary>
            /// 獲取西曆節日
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetHoliday(DateTime dt){
                string strReturn = "";
                object g = gHoliday[dt.Month.ToString("00") + dt.Day.ToString("00")];
                if (g != null){
                    strReturn = g.ToString();
                }
                return strReturn;
            }


            /// <summary>
            /// 獲取農曆節日
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static string GetChinaHoliday(DateTime dt){
                string strReturn = "";
                int year = china.GetYear(dt);
                int iMonth = china.GetMonth(dt);
                int leapMonth = china.GetLeapMonth(year);
                int iDay = china.GetDayOfMonth(dt);
                if (china.GetDayOfYear(dt) == china.GetDaysInYear(year)){
                    strReturn = "除夕";
                }
                else if (leapMonth != iMonth){
                    if (leapMonth != 0 && iMonth >= leapMonth){
                        iMonth--;
                    }
                    object n = nHoliday[iMonth.ToString("00") + iDay.ToString("00")];
                    if (n != null){
                        if (strReturn == ""){
                            strReturn = n.ToString();
                        }
                        else{
                            strReturn += " " + n.ToString();
                        }
                    }
                }
                return strReturn;
            }
            #endregion





            #region 陰曆-陽曆-轉換

            /// <summary>
            /// 陰曆轉為陽曆
            /// </summary>
            /// <param name="year">指定的年份</param>
            public static DateTime GetLunarYearDate(DateTime dt){
                int cnYear = china.GetYear(dt);
                int cnMonth = china.GetMonth(dt);
                int num1 = 0;
                int num2 = china.IsLeapYear(cnYear) ? 13 : 12;
                while (num2 >= cnMonth){
                    num1 += china.GetDaysInMonth(cnYear, num2--);
                }
                num1 = num1 - china.GetDayOfMonth(dt) + 1;
                return dt.AddDays(num1);
            }

            /// <summary>
            /// 陽曆轉為陰曆
            /// </summary>
            /// <param name="dt">西曆日期</param>
            /// <returns>農曆的日期</returns>
            public static DateTime GetSunYearDate(DateTime dt){
                int year = china.GetYear(dt);
                int iMonth = china.GetMonth(dt);
                int iDay = china.GetDayOfMonth(dt);
                int leapMonth = china.GetLeapMonth(year);
                bool isLeapMonth = iMonth == leapMonth;
                if (leapMonth != 0 && iMonth >= leapMonth){
                    iMonth--;
                }
                string str = string.Format("{0}-{1}-{2}", year, iMonth, iDay);
                DateTime dtNew = DateTime.Now;
                try{
                    dtNew = Convert.ToDateTime(str); //防止出現2月份時,會出現超過時間,出現“2015-02-30”這種錯誤日期
                }
                catch
                {}
                return dtNew;
            }
            #endregion
        }

 


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

-Advertisement-
Play Games
更多相關文章
  • 如果伺服器正在運行的 Nginx 要進行升級、添加或刪除模塊時. 我們需要停掉伺服器並做相應修改,這樣伺服器就要在一段時間內停止服務. Nginx可以在不停機的情況下進行各種升級動作而不影響伺服器運行 a.平滑重啟命令 註意,修改了配置文件後最好先檢查一下修改過的配置文件是否正確。 以免重啟後Ngi ...
  • a. 用戶名 system 密碼 manager 導出到D:/daochu.dmp中 b. 將資料庫中 system 用戶與 sys 用戶的表導出 c. 將資料庫中的表 inner_notify、notify_staff_relat導出 d. 將資料庫中的表 table1 中的欄位 filed1 以 ...
  • 有時候你需要重啟Linux 上的 Oracle 資料庫。 註意先啟動資料庫,然後在啟動資料庫監聽。 a.切換為 oracle 用戶身份,也可以使用 su - 將 home 和 path 都切換到 oralce 用戶。 b.啟動 Sqlplus(使用 sql 語句) 但不進行登錄動作 c.使用資料庫管 ...
  • 命令行輸入: vi /etc/sysconfig/iptables 將 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT (允許80埠) 添加到22埠配置的下麵 最後如圖: 重啟防火牆: /etc/init.d/ip ...
  • 1.下載安裝VMware,我安裝的是VMware 12.VMware從11開始不再支持32位系統,32位系統請安裝10. VMware官方功能特性介紹http://www.vmware.com/cn/products/workstation VMware下載安裝。地址:http://www.epin ...
  • 1、使用yum安裝 yum -y install httpd mysql mysql-server php php-mysql postgresql postgresql-server php-postgresql php-pgsql php-devel 2、配置httpd 2.1、啟動httpd服 ...
  • 互斥量和臨界區非常相似,只有擁有了互斥對象的線程才可以訪問共用資源,而互斥對象只有一個,因此可以保證同一時刻有且僅有一個線程可以訪問共用資源,達到線程同步的目的。 互斥量相對於臨界區更為高級,可以對互斥量進行命名,支持跨進程的線程同步。互斥量是調用的Win32的API對互斥鎖的操作,因此在同一操作系 ...
  • ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...