中国毕竟是一个文明大国,有一些自己悠久的历史文化传统,农历就是其中之一,它对指导农业生产有着极为重要的意义,还有春节等一些传节日并没有因为使用公 元纪年而消失,在程序开发种我们也经常会遇到一些需要在公历与农历之间进行 转换,在1.1之前大家都是采用了第三方的算法(我也采用过),现 在在.net2.0种已经提供了这种功能了。下面我就以几个简单的例子展示它的用法。
运行效果:
using
System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
/* *
* 说明:在东亚各国,除了通用的公元纪年之外,还有各自以前使用的阴历纪年法,在.net2.0种增加了针对东亚各国的日历类EastAsianLunisolarCalendar,
* 它是一个抽象类,有各种针对不同国家的的子类,其中ChineseLunisolarCalendar就是针对中国的日历类,它提公元纪年与中国传统农历纪年之间的相互转换
* 利用它可以计算天干地支等有关农历的信息,本程序就是来简单展示这个类的用法。它能计算的农历范围从公历1901-2-19至2101-1-28。
* 作者:周公
* 日期:2007-11-21
* 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2007/11/21/1896258.aspx
*/
namespace ChineseCalendar
{
class Program
{
private static ChineseLunisolarCalendar chineseDate = new ChineseLunisolarCalendar();
static void Main( string [] args)
{
// ChineseLunisolarCalendar chineseDate = new ChineseLunisolarCalendar();
ShowYearInfo();
ShowCurrentYearInfo();
Console.ReadLine();
}
/// <summary>
/// 展示阴历年份信息
/// </summary>
public static void ShowYearInfo()
{
for ( int i = chineseDate.MinSupportedDateTime.Year; i < chineseDate.MaxSupportedDateTime.Year; i ++ )
{
Console.WriteLine( " 年份:{0},月份总数:{1},总天数:{2},干支序号:{3} " , i, chineseDate.GetMonthsInYear(i),chineseDate.GetDaysInYear(i)
,chineseDate.GetSexagenaryYear( new DateTime(i, 3 , 1 )));
}
}
/// <summary>
/// 展示当前年份信息
/// </summary>
public static void ShowCurrentYearInfo()
{
Console.WriteLine( " 今年的阴历时间:{0}年{1}月{2}日。 " , chineseDate.GetYear(DateTime.Now),chineseDate.GetMonth(DateTime.Now),chineseDate.GetDayOfMonth(DateTime.Now));
Console.WriteLine( " 今年阴历天数:{0},今年{1}闰年 " , chineseDate.GetDaysInYear(DateTime.Now.Year),(chineseDate.IsLeapYear(DateTime.Now.Year) == true ) ? " 是 " : " 不是 " );
Console.WriteLine( " 今年农历每月的天数: " );
for ( int i = 1 ; i <= chineseDate.GetMonthsInYear(DateTime.Now.Year); i ++ )
{
Console.Write( " {0,-5} " ,chineseDate.GetDaysInMonth(DateTime.Now.Year,i));
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Globalization;
/* *
* 说明:在东亚各国,除了通用的公元纪年之外,还有各自以前使用的阴历纪年法,在.net2.0种增加了针对东亚各国的日历类EastAsianLunisolarCalendar,
* 它是一个抽象类,有各种针对不同国家的的子类,其中ChineseLunisolarCalendar就是针对中国的日历类,它提公元纪年与中国传统农历纪年之间的相互转换
* 利用它可以计算天干地支等有关农历的信息,本程序就是来简单展示这个类的用法。它能计算的农历范围从公历1901-2-19至2101-1-28。
* 作者:周公
* 日期:2007-11-21
* 首发地址:http://blog.csdn.net/zhoufoxcn/archive/2007/11/21/1896258.aspx
*/
namespace ChineseCalendar
{
class Program
{
private static ChineseLunisolarCalendar chineseDate = new ChineseLunisolarCalendar();
static void Main( string [] args)
{
// ChineseLunisolarCalendar chineseDate = new ChineseLunisolarCalendar();
ShowYearInfo();
ShowCurrentYearInfo();
Console.ReadLine();
}
/// <summary>
/// 展示阴历年份信息
/// </summary>
public static void ShowYearInfo()
{
for ( int i = chineseDate.MinSupportedDateTime.Year; i < chineseDate.MaxSupportedDateTime.Year; i ++ )
{
Console.WriteLine( " 年份:{0},月份总数:{1},总天数:{2},干支序号:{3} " , i, chineseDate.GetMonthsInYear(i),chineseDate.GetDaysInYear(i)
,chineseDate.GetSexagenaryYear( new DateTime(i, 3 , 1 )));
}
}
/// <summary>
/// 展示当前年份信息
/// </summary>
public static void ShowCurrentYearInfo()
{
Console.WriteLine( " 今年的阴历时间:{0}年{1}月{2}日。 " , chineseDate.GetYear(DateTime.Now),chineseDate.GetMonth(DateTime.Now),chineseDate.GetDayOfMonth(DateTime.Now));
Console.WriteLine( " 今年阴历天数:{0},今年{1}闰年 " , chineseDate.GetDaysInYear(DateTime.Now.Year),(chineseDate.IsLeapYear(DateTime.Now.Year) == true ) ? " 是 " : " 不是 " );
Console.WriteLine( " 今年农历每月的天数: " );
for ( int i = 1 ; i <= chineseDate.GetMonthsInYear(DateTime.Now.Year); i ++ )
{
Console.Write( " {0,-5} " ,chineseDate.GetDaysInMonth(DateTime.Now.Year,i));
}
}
}
}
本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/163928 ,如需转载请自行联系原作者