asp.net 公历转农历

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];
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LunarCalendar返回农历(阴历)日期的JAR包 根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! toString()方法输出阴历日期(例如:癸巳年七月廿) getFullInfo()方法输出包括生肖在内的阴历日期(例如:癸巳年七月廿,生肖:蛇) 构建方法包括以下四种: public LunarCalendar(String year, String month, String date) public LunarCalendar(JComboBox jcYear, JComboBox jcMonth, JComboBox jcDate) public LunarCalendar(int year, int month, int date) public LunarCalendar(Calendar cal)) 使用前两种构建方法时,若文本内容不为数字,getErrorMessage会返回错误信息 方法摘要 java.lang.String getErrorMessage() 返回String类型的错误信息 java.lang.String getFullInfo() 返回String类型的详细阴历信息(例如:癸巳年七月廿,生肖:蛇) java.lang.String getLunarAnimal() 返回String类型的生肖(例如:蛇) java.lang.String getLunarDate() 返回String类型的阴历日期(例如:廿) java.lang.String getLunarMonth() 返回String类型的阴历月份(例如:七) java.lang.String getLunarYear() 返回String类型的阴历年份(天干地支,例如:癸巳) java.lang.String toString() 返回String类型的阴历日期(例如:癸巳年七月廿) JAR包名称:LunarCalendar version 1.0 8/26/2013 作者:Roy, Liu royliu90@live.cn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值