C#公历转换到农历

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// lunar_calendar 的摘要说明
/// </summary>
public class lunar_calendar
{
    private string[] m_str农历日历表;
    private string[] m_str天干地支表;
    private string m_str属相表;
    private string m_str农历月表;
    private string m_str农历日表;
    private int m_i最大公历年份;
    private int m_i最小公历年份;
    private string m_year, m_month, m_day;

    public string Lunar_Calendar_Year
    {
        get { return m_year; }
    }

    public string Lunar_Calendar_Month
    {
        get { return m_month; }
    }

    public string Lunar_Calendar_Day
    {
        get { return m_day; }
    }

    public lunar_calendar()
    {
        m_str农历日历表 = new string[] {
            "0100101101101080131",
            "0100101011100000219",
            "1010010101110000208",
            "0101001001101050129",
            "1101001001100000216",
            "1101100101010000204",
            "0110101010101040125",
            "0101011010100000213",
            "1001101011010000202",
            "0100101011101020122",
            "0100101011100000210",
            "1010010011011060130",
            "1010010011010000218",
            "1101001001010000206",
            "1101010101001050126",
            "1011010101010000214",
            "0101011010100000204",
            "1001011011010020123",
            "1001010110110000211",
            "0100100110111070201",
            "0100100110110000220",
            "1010010010110000208",
            "1011001001011050128",
            "0110101001010000216",
            "0110110101000000205",
            "1010110110101040124",
            "0010101101100000213",
            "1001010101110000202",
            "0100100101111020123",
            "0100100101110000210",
            "0110010010110060130",
            "1101010010100000217",
            "1110101001010000206",
            "0110110101001050126",
            "0101101011010000214",
            "0010101101100000204",
            "1001001101110030124",
            "1001001011100000211",
            "1100100101101070131",
            "1100100101010000219",
            "1101010010100000208",
            "1101101001010060127",
            "1011010101010000215",
            "0101011010100000205",
            "1010101011011040125",
            "0010010111010000213",
            "1001001011010000202",
            "1100100101011020122",
            "1010100101010000210",
            "1011010010101070129",
            "0110110010100000217",
            "1011010101010000206",
            "0101010110101050127",
            "0100110110100000214",
            "1010010110110000203",
            "0101001010111030124",
            "0101001010110000212",
            "1010100101010080131",
            "1110100101010000218",
            "0110101010100000208",
            "1010110101010060128",
            "1010101101010000215",
            "0100101101100000205",
            "1010010101110040125",
            "1010010101110000213",
            "0101001001100000202",
            "1110100100110030121",
            "1101100101010000209",
            "0101101010101070130",
            "0101011010100000217",
            "1001011011010000206",
            "0100101011101050127",
            "0100101011010000215",
            "1010010011010000203",
            "1101001001101040123",
            "1101001001010000211",
            "1101010100101080131",
            "1011010101000000218",
            "1011011010100000207",
            "1001011011010060128",
            "1001010110110000216",
            "0100100110110000205",
            "1010010010111040125",
            "1010010010110000213",
            "1011001001011100202",
            "0110101001010000220",
            "0110110101000000209",
            "1010110110101060129",
            "1010101101100000217",
            "1001001101110000206",
            "0100100101111050127",
            "0100100101110000215",
            "0110010010110000204",
            "0110101001010030123",
            "1110101001010000210",
            "0110101100101080131",
            "0101101011000000219",
            "1010101101100000207",
            "1001001101101050128",
            "1001001011100000216",
            "1100100101100000205",
            "1101010010101040124",
            "1101010010100000212",
            "1101101001010000201",
            "0101101010101020122",
            "0101011010100000209",
            "1010101011011070129",
            "0010010111010000218",
            "1001001011010000207",
            "1100100101011050126",
            "1010100101010000214",
            "1011010010100000214"  
           };
        m_str属相表 = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
        m_str农历月表 = "正二三四五六七八九十寒腊";
        m_str农历日表 = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十";
        m_i最大公历年份 = 2011;
        m_i最小公历年份 = 1900;

        string str天干 = "甲乙丙丁戊已庚辛壬癸";
        string str地支 = "子丑寅卯辰巳午未申酉戌亥";
        m_str天干地支表 = new string[60];
        for (int i = 0; i < 60; i++)
        {
            m_str天干地支表[i] = str天干.Substring(i % 10, 1) + str地支.Substring(i % 12, 1);
        }

    }

    public void get_lunar_calendar(int i公历年,int i公历月,int i公历日)
    {
        if ((i公历年 < m_i最小公历年份) || (i公历年 > m_i最大公历年份))
        { //如果不是有效公历日期,退出。
            return;
        }

        // 计算农历年
        int i农历年;
        int i农历月;
        int i农历日;

        i农历年 = i公历年;
        // 农历新年月份
        i农历月 = Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(15, 2)));
        // 农历新年日子
        i农历日 = Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(17, 2))); ;

        if ((i公历月 < i农历月) || ((i公历月 == i农历月) && (i公历日 < i农历日)))
        {
            i农历年--;
            // 农历新年月份
            i农历月 = Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(15, 2)));
            // 农历新年日子
            i农历日 = Convert.ToInt32((m_str农历日历表[i农历年 - m_i最小公历年份].Substring(17, 2))); ;
        }

        // 计算农历月
        DateTime dt公历日期 = new DateTime(i公历年, i公历月, i公历日);
        DateTime dt农历日期 = new DateTime(i农历年, i农历月, i农历日);
        TimeSpan ts日期差 = dt公历日期 - dt农历日期;
        int i天数 = ts日期差.Days;

        i农历月 = 1;
        i农历日 = 1;
        bool b闰月 = false;
        for (int i = 0; i < i天数; i++)
        {
            i农历日++;
            if (i农历日 == 30 + Convert.ToInt32(m_str农历日历表[i农历年 - m_i最小公历年份].Substring(i农历月 - 1, 1)) ||
             (b闰月 && (i农历日 == 30 + Convert.ToInt32(m_str农历日历表[i农历年 - m_i最小公历年份].Substring(12, 1)))))
            {
                if ((b闰月 == false) && (i农历月 == Convert.ToInt32(m_str农历日历表[i农历年 - m_i最小公历年份].Substring(13, 2))))
                {
                    b闰月 = true;
                }
                else
                {
                    b闰月 = false;
                    i农历月++;
                }
                i农历日 = 1;
            }
            else
            {
            }
        }

        // 计算农历日
        string str农历日 = m_str农历日表.Substring((i农历日 - 1) * 2, 2);

        // 计算农历月
        string str农历月 = m_str农历月表.Substring(i农历月 - 1, 1) + "月";
        if (b闰月)
        {
            str农历月 = "闰" + str农历月;
        }

        // 农历年
        string str农历年 = Convert.ToString(i农历年, 10) + "年";

        // 计算天干地支
        string str天干地支 = m_str天干地支表[(i农历年 - 4) % 60];

        // 计算属相
        string str属相 = m_str属相表.Substring((i农历年 - 4) % 12, 1);

        // 返回农历日期
        //return str属相 + "," + str天干地支 + "," + str农历年 + str农历月 + str农历日;
        m_year = str农历年;
        m_month = str农历月;
        m_day = str农历日;
    }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值