C#公历转农历算法

C#公历转农历算法,第1张

概述C#公历农历算法

下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。

内存溢出小编现在分享给大家,也给大家做个参考。

 /// <summary>/// LunDay 的摘要说明。/// 用法说明/// 直接调用即可,比较简单/// </summary>public class LunDay{    public LunDay()    {        //        // Todo: 在此处添加构造函数逻辑        //    }    //天干    private static string[] TianGan = { "甲","乙","丙","丁","戊","己","庚","辛","壬","癸" };    //地支    private static string[] DiZhi = { "子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥" };    //十二生肖    private static string[] ShengXiao = { "鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪" };    //农历日期    private static string[] Dayname =   {"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};    //农历月份    private static string[] Monthname = { "*","正","二","三","四","五","六","七","八","九","十","腊" };    //公历月计数天    private static int[] MonthAdd = { 0,31,59,90,120,151,181,212,243,273,304,334 };    //农历数据    private static int[] LunarData = {2635,333387,1701,1748,267701,694,2391,133423,1175,396438,3402,3749,331177,1453,201326,2350,465197,3221,400202,2901,1386,267611,605,2349,137515,2709,464533,1738,330421,1242,2651,199255,1323,529706,3733,1706,398762,2741,1206,267438,2647,1318,204070,3477,461653,2413,330077,1197,2637,268877,3365,531109,2900,2922,398042,2395,1179,267415,2635,661067,398772,2742,330031,1611,200010,527717,1452,332397,3222,268949,3493,133973,464219,334123,2890,267946,2773,592565,1210,395863,2707,265877};    /// <summary>    /// 获取对应日期的农历    /// </summary>    /// <param name="dtDay">公历日期</param>    /// <returns></returns>    public 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;        //计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)        nTheDate = (year - 1921) * 365 + (year - 1921) / 4 + day + MonthAdd[month - 1] - 38;        if ((year % 4 == 0) && (month > 2))            nTheDate += 1;        //计算天干,地支,月,日        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)            {                //获取LunarData[m]的第n个二进制位的值                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 格式化日期显示为三月廿四        if (k == 12)        {            if (month == LunarData[m] / 65536 + 1)                month = 1 - month;            else if (month > LunarData[m] / 65536 + 1)                month = month - 1;        }        //生肖        calendar = ShengXiao[(year - 4) % 60 % 12].ToString() + "年 ";        //天干        calendar += TianGan[(year - 4) % 60 % 10].ToString();        //地支        calendar += DiZhi[(year - 4) % 60 % 12].ToString() + " ";        //农历月        if (month < 1)            calendar += "闰" + Monthname[-1 * month].ToString() + "月";        else            calendar += Monthname[month].ToString() + "月";        //农历日        calendar += Dayname[day].ToString() + "日";        return calendar;        #endregion    }} 

以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

总结

以上是内存溢出为你收集整理的C#公历转农历算法全部内容,希望文章能够帮你解决C#公历转农历算法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1238172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存