程序中要求把输入的阳历全部自动转换成阴历,有没有简单或现成的方法,
我可不想去查日历一个一个对啊。

解决方案 »

  1.   

    unit calfunc;interfaceuses SysUtils,Windows;const
      START_YEAR=1901;
      END_YEAR=2050;//返回iYear年iMonth月的天数 1年1月 --- 65535年12月
    function MonthDays(iYear,iMonth:Word):Word;//返回阴历iLunarYer年阴历iLunarMonth月的天数,如果iLunarMonth为闰月,
    //高字为第二个iLunarMonth月的天数,否则高字为0  1901年1月---2050年12月
    function LunarMonthDays(iLunarYear,iLunarMonth:Word):Longword;//返回阴历iLunarYear年的总天数 1901年1月---2050年12月
    function LunarYearDays(iLunarYear:Word):Word;//返回阴历iLunarYear年的闰月月份,如没有返回0  1901年1月---2050年12月
    function GetLeapMonth(iLunarYear:Word):Word;//把iYear年格式化成天干记年法表示的字符串
    procedure FormatLunarYear(iYear:Word;var pBuffer:string);overload;
    function FormatLunarYear(iYear:Word):string;overload;//把iMonth格式化成中文字符串
    procedure FormatMonth(iMonth:Word;var pBuffer:string;bLunar:Boolean=True);overload;
    function FormatMonth(iMonth:Word;bLunar:Boolean=True):string;overload;//把iDay格式化成中文字符串
    procedure FormatLunarDay(iDay:Word;var pBuffer:string);overload;
    function FormatLunarDay(iDay:Word):string;overload;//计算公历两个日期间相差的天数  1年1月1日 --- 65535年12月31日
    function CalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word=START_YEAR;iStartMonth:Word=1;iStartDay:Word=1):Longword;overload;
    function CalcDateDiff(EndDate,StartDate:TDateTime):Longword;overload;//计算公历iYear年iMonth月iDay日对应的阴历日期,返回对应的阴历节气 0-24
    //1901年1月1日---2050年12月31日function GetLunarHolDay(InDate:TDateTime):string;overload;
    function GetLunarHolDay(iYear,iMonth,iDay:Word):string;overload;//private function--------------------------------------//计算从1901年1月1日过iSpanDays天后的阴历日期
    procedure l_CalcLunarDate(var iYear,iMonth,iDay:Word;iSpanDays:Longword);//计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气
    function l_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;完整的在这里http://dev.csdn.net/Develop/article/10/10678.shtm
      

  2.   

    有现成的控件,你可以到这下载:
    www.vclxx.org