日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

阴阳历互相转换方法

發布時間:2024/6/21 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 阴阳历互相转换方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
   #region 陰歷轉陽歷

        /// <summary>
        /// 獲取指定年份春節當日(正月初一)的陽歷日期
        /// </summary>
        /// <param name="year">指定的年份</param>
        private  DateTime GetLunarNewYearDate(int year)
        {
            DateTime dt = new DateTime(year, 1, 1);
            int cnYear = calendar.GetYear(dt);
            int cnMonth = calendar.GetMonth(dt);

            int num1 = 0;
            int num2 = calendar.IsLeapYear(cnYear) ? 13 : 12;

            while (num2 >= cnMonth)
            {
                num1 += calendar.GetDaysInMonth(cnYear, num2--);
            }

            num1 = num1 - calendar.GetDayOfMonth(dt) + 1;
            return dt.AddDays(num1);
        }

        /// <summary>
        /// 陰歷轉陽歷
        /// </summary>
        /// <param name="year">陰歷年</param>
        /// <param name="month">陰歷月</param>
        /// <param name="day">陰歷日</param>
        /// <param name="IsLeapMonth">是否閏月</param>
        public  DateTime GetDateFromLunarDate(int year, int month, int day, bool IsLeapMonth)
        {
            if (year < 1902 || year > 2100)
                throw new Exception("只支持1902~2100期間的農歷年");
            if (month < 1 || month > 12)
                throw new Exception("表示月份的數字必須在1~12之間");

            if (day < 1 || day > calendar.GetDaysInMonth(year, month))
                throw new Exception("農歷日期輸入有誤");

            int num1 = 0, num2 = 0;
            int leapMonth = calendar.GetLeapMonth(year);

            if (((leapMonth == month + 1) && IsLeapMonth) || (leapMonth > 0 && leapMonth <= month))
                num2 = month;
            else
                num2 = month - 1;

            while (num2 > 0)
            {
                num1 += calendar.GetDaysInMonth(year, num2--);
            }

            DateTime dt = GetLunarNewYearDate(year);
            return dt.AddDays(num1 + day - 1);
        }

        /// <summary>
        /// 陰歷轉陽歷
        /// </summary>
        /// <param name="date">陰歷日期</param>
        /// <param name="IsLeapMonth">是否閏月</param>
        public  DateTime GetDateFromLunarDate(DateTime date, bool IsLeapMonth)
        {
            return GetDateFromLunarDate(date.Year, date.Month, date.Day, IsLeapMonth);
        }

        #endregion

        #region 陽歷轉陰歷
        public string SolarToChineseLunisolarDate(DateTime solarDateTime)
        {
            System.Globalization.ChineseLunisolarCalendar cal = new System.Globalization.ChineseLunisolarCalendar();

            int year = cal.GetYear(solarDateTime);
            int month = cal.GetMonth(solarDateTime);
            int day = cal.GetDayOfMonth(solarDateTime);
            int leapMonth = cal.GetLeapMonth(year);
            return string.Format("農歷{0}{1}({2})年{3}{4}月{5}{6}"
                                , "甲乙丙丁戊己庚辛壬癸"[(year - 4) % 10]
                                , "子丑寅卯辰巳午未申酉戌亥"[(year - 4) % 12]
                                , "鼠牛虎兔龍蛇馬羊猴雞狗豬"[(year - 4) % 12]
                                , month == leapMonth ? "閏" : ""
                                , "無正二三四五六七八九十冬臘"[leapMonth > 0 && leapMonth <= month ? month - 1 : month]
                                , "初十廿三"[day / 10]
                                , "日一二三四五六七八九"[day % 10]
                                );
        }
        #endregion

陽歷轉陰歷

  #region 陽歷轉陰歷
        public string SolarToChineseLunisolarDate(DateTime solarDateTime)
        {
            System.Globalization.ChineseLunisolarCalendar cal = new System.Globalization.ChineseLunisolarCalendar();

            int year = cal.GetYear(solarDateTime);
            int month = cal.GetMonth(solarDateTime);
            int day = cal.GetDayOfMonth(solarDateTime);
            int leapMonth = cal.GetLeapMonth(year);
            return string.Format("農歷{0}{1}({2})年{3}{4}月{5}{6}"
                                , "甲乙丙丁戊己庚辛壬癸"[(year - 4) % 10]
                                , "子丑寅卯辰巳午未申酉戌亥"[(year - 4) % 12]
                                , "鼠牛虎兔龍蛇馬羊猴雞狗豬"[(year - 4) % 12]
                                , month == leapMonth ? "閏" : ""
                                , "無正二三四五六七八九十冬臘"[leapMonth > 0 && leapMonth <= month ? month - 1 : month]
                                , "初十廿三"[day / 10]
                                , "日一二三四五六七八九"[day % 10]
                                );
        }
  #endregion

調用方法:

    //陰歷轉陽歷
    public void GetDayFromLunarDate(DateTime time)
    {
        ChineseCalendar cc = new ChineseCalendar(time);
        cc.GetDateFromLunarDate(time, true);
    }
    //陽歷轉陰歷
    public void GetLunarDateFromDay(DateTime time)
    {
        ChineseCalendar cc = new ChineseCalendar(time);
        string LunarDate = cc.SolarToChineseLunisolarDate(time);
    }

總結

以上是生活随笔為你收集整理的阴阳历互相转换方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。