获得农历日期

29 篇文章 0 订阅

using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;

using System.Collections.Generic;
using System.Text;

using System.Globalization;


public partial class TestDate : System.Web.UI.Page
{
    private static ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();
    private static string ChineseNumber = "〇一二三四五六七八九";
    public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸";
    public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";
    public static readonly string[] ChineseDayName = new string[] {
            "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
            "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
            "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};
    public static readonly string[] ChineseMonthName = new string[] { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(DateTime.Now.ToString()+"<br>");
        Response.Write(GetChineseDate(DateTime.Now));

    }
    private void Transform(DateTime dt)
    {
       
    }
    /// <summary>
    /// 获取一个公历日期对应的完整的农历日期
    /// </summary>
    /// <param name="time">一个公历日期</param>
    /// <returns>农历日期</returns>
    public string GetChineseDate(DateTime time)
    {
        string strY = GetYear(time);
        string strM = GetMonth(time);
        string strD = GetDay(time);
        string strSB = GetStemBranch(time);
        string strDate = strY + "(" + strSB + ")年 " + strM + "月 " + strD;
        return strDate;
    }
    /// <summary>
    /// 获取一个公历日期的农历干支纪年
    /// </summary>
    /// <param name="time">一个公历日期</param>
    /// <returns>农历干支纪年</returns>
    public string GetStemBranch(DateTime time)
    {
        int sexagenaryYear = calendar.GetSexagenaryYear(time);
        string stemBranch = CelestialStem.Substring(sexagenaryYear % 10 - 1, 1) + TerrestrialBranch.Substring(sexagenaryYear % 12 - 1, 1);
        return stemBranch;
    }

    /// <summary>
    /// 获取一个公历日期的农历年份
    /// </summary>
    /// <param name="time">一个公历日期</param>
    /// <returns>农历年份</returns>
    public string GetYear(DateTime time)
    {
        StringBuilder sb = new StringBuilder();
        int year = calendar.GetYear(time);
        int d;
        do
        {
            d = year % 10;
            sb.Insert(0, ChineseNumber[d]);
            year = year / 10;
        } while (year > 0);
        return sb.ToString();
    }


    /// <summary>
    /// 获取一个公历日期的农历月份
    /// </summary>
    /// <param name="time">一个公历日期</param>
    /// <returns>农历月份</returns>
    public string GetMonth(DateTime time)
    {
        int month = calendar.GetMonth(time);
        int year = calendar.GetYear(time);
        int leap = 0;

        //正月不可能闰月
        for (int i = 3; i <= month; i++)
        {
            if (calendar.IsLeapMonth(year, i))
            {
                leap = i;
                break; //一年中最多有一个闰月
            }

        }
        if (leap > 0) month--;
        return (leap == month + 1 ? "闰" : "") + ChineseMonthName[month - 1];
    }


    /// <summary>
    /// 获取一个公历日期的农历日
    /// </summary>
    /// <param name="time">一个公历日期</param>
    /// <returns>农历日</returns>
    public string GetDay(DateTime time)
    {
        return ChineseDayName[calendar.GetDayOfMonth(time) - 1];
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值