C # convert the winform Gregorian calendar date to the lunar calendar date,

Source: Internet
Author: User

C # convert the winform Gregorian calendar date to the lunar calendar date,

Copy the code: Pass in the corresponding parameter to use:

///

        /// Get the current server Gregorian time to Lunar calendar time
        ///
        // The sky is dry
        private static string [] TianGan = {"A", "B", "C", "Ding", "pent", "Self", "Geng", "Sin", "Non", "Dec"};

        // Earth branch
        private static string [] DiZhi = {"子", "ugly", "In", "卯", "Chen", "巳", "Lu", "Wei", "Shen", "Yu", "戌"," Hai "};

        // Zodiac signs
        private static string [] ShengXiao = {"rat", "cow", "tiger", "rabbit", "dragon", "snake", "horse", "sheep", "monkey", "chicken", "dog" "," Pig "};

        // Lunar Date
        private static string [] DayName = {"*", "Junior", "Junior 2", "Junior 3", "Junior 4", "Junior 5"
             "First Six", "First Seven", "First Eight", "First Nine", "First Ten",
             "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen",
             "Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty",
             "Twenty One", "Twenty Two", "Twenty Three", "Twenty Four", "Twenty Five",
             "Twenty Six", "Twenty Seven", "Twenty Eight", "Twenty Nine", "Thirty"};

        // Lunar month
        private static string [] MonthName = {"*", "positive", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" "," Eleven "," La "};

        // Counting days in Gregorian calendar month
        private static int [] MonthAdd = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
        // Lunar calendar data
        private static int [] LunarData = {2635,333387,1701,1748,267701,694,2391,133423,1175,396438
            , 3402,3749,331177,1453,694,201326,2350,465197,3221,3402
            , 400202,2901,1386,267611,605,2349,137515,2709,464533,1738
            , 2901,330421,1242,2651,199255,1323,529706,3733,1706,398762
            , 2741,1206,267438,2647,1318,204070,3477,461653,1386,2413
            , 330077,1197,2637,268877,3365,531109,2900,2922,398042,2395
            , 1179,267415,2635,661067,1701,1748,398772,2742,2391,330031
            , 1175,1611,200010,3749,527717,1452,2742,332397,2350,3222
            , 268949,3402,3493,133973,1386,464219,605,2349,334123,2709
            , 2890,267946,2773,592565,1210,2651,395863,1323,2707,265877};
        ///

        /// Get the lunar calendar corresponding to the date
        ///
        /// Gregorian date
        ///
        public static string GetLunarCalendar (DateTime dtDay)
        {
            string sYear = dtDay.Year.ToString ();
            string sMonth = dtDay.Month.ToString ();
            string sDay = dtDay.Day.ToString ();
            int year;
            int month;
            int day;
            try
            {
                year = int.Parse (sYear);
                month = int.Parse (sMonth);
                day = int.Parse (sDay);
            }
            catch
            {
                year = DateTime.Now.Year;
                month = DateTime.Now.Month;
                day = DateTime.Now.Day;
            }

            int nTheDate;
            int nIsEnd;
            int k, m, n, nBit, i;
            string calendar = string.Empty;
            // Calculate the number of days until the initial time of February 8, 1921: 1921-2-8 (the first day of the first month)
            nTheDate = (year-1921) * 365 + (year-1921) / 4 + day + MonthAdd [month-1]-38;
            if ((year% 4 == 0) && (month> 2))
                nTheDate + = 1;
            // Calculate the sky dry, earth branch, month, day
            nIsEnd = 0;
            m = 0;
            k = 0;
            n = 0;
            while (nIsEnd! = 1)
            {
                if (LunarData [m] <4095)
                    k = 11;
                else
                    k = 12;
                n = k;
                while (n> = 0)
                {
                    // Get the nth binary value of LunarData [m]
                    nBit = LunarData [m];
                    for (i = 1; i <n + 1; i ++)
                        nBit = nBit / 2;
                    nBit = nBit% 2;
                    if (nTheDate <= (29 + nBit))
                    {
                        nIsEnd = 1;
                        break;
                    }
                    nTheDate = nTheDate-29-nBit;
                    n = n-1;
                }
                if (nIsEnd == 1)
                    break;
                m = m + 1;
            }
            year = 1921 + m;
            month = k-n + 1;
            day = nTheDate;
            // return year + "-" + month + "-" + day;

            #region Formatted date is displayed as March 24
            if (k == 12)
            {
                if (month == LunarData [m] / 65536 + 1)
                    month = 1-month;
                else if (month> LunarData [m] / 65536 + 1)
                    month = month-1;
            }

            // Chinese zodiac
            calendar = ShengXiao [(year-4)% 60% 12] .ToString () + "year";
            // The sky is dry
            calendar + = TianGan [(year-4)% 60% 10] .ToString ();
            // Earth branch
            calendar + = DiZhi [(year-4)% 60% 12] .ToString () + "";

            // Lunar month
            if (month <1)
                calendar + = "Leap" + MonthName [-1 * month] .ToString () + "Month";
            else
                calendar + = MonthName [month] .ToString () + "月";

            // Lunar day
            calendar + = DayName [day] .ToString () + "日";

            return calendar;

            #endregion
        } 


Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.