不知在delphi中如何处理闰月问题,要知道闰月好象是没有规律的啊!要找一个合适的算法好象不容易啊...不知那位大侠知道,望告知!!!

解决方案 »

  1.   

    找个阴历控件研究研究请大家去 http://www.new7wonders.com/c/voting.php 投长城一票
      

  2.   

    数组gLanarMonth存放阴历1901年到2050年闰月的月份,
    如没有则为0,每字节存两年:  gLunarMonth:array[0..74]  of  Byte=(
          $00,  $50,  $04,  $00,  $20,      //1910
          $60,  $05,  $00,  $20,  $70,      //1920
          $05,  $00,  $40,  $02,  $06,      //1930
          $00,  $50,  $03,  $07,  $00,      //1940
          $60,  $04,  $00,  $20,  $70,      //1950
          $05,  $00,  $30,  $80,  $06,      //1960
          $00,  $40,  $03,  $07,  $00,      //1970
          $50,  $04,  $08,  $00,  $60,      //1980
          $04,  $0a,  $00,  $60,  $05,      //1990
          $00,  $30,  $80,  $05,  $00,      //2000
          $40,  $02,  $07,  $00,  $50,      //2010
          $04,  $09,  $00,  $60,  $04,      //2020
          $00,  $20,  $60,  $05,  $00,      //2030
          $30,  $b0,  $06,  $00,  $50,      //2040
          $02,  $07,  $00,  $50,  $03);    //2050
    )
      

  3.   

    anaikh(huangjing) 的意见 我也听说过 好象是这个样子的.以前学过,但是记不清楚了!不过隐约记得 和400也有关系.
      

  4.   

    D_Q(A.Dai)(阿呆) 不知阁下是否知道这1901-2050年的代码呢?谢谢!
      

  5.   

    是不是可以用date(var date:Tdatetime;year,month,day:word)采集系统时间;还有就是如果年数除以100没有余数, 就用它除以400, 如果仍没有余数, 这个年就是闰年; 如果年数除以100有余数, 就用它除以4, 如果没有余数, 这年就是闰年!不知道你有没有看过李大友编的C教程,里面就有这方面的问题。
      

  6.   

    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;implementationvar
    //数组gLunarDay存入阴历1901年到2100年每年中的月天数信息,
    //阴历每月只能是29或30天,一年用12(或13)个二进制位表示,对应位为1表30天,否则为29天
      gLunarMonthDay:array[0..149] of Word=(
        //测试数据只有1901.1.1 --2050.12.31
        $4ae0, $a570, $5268, $d260, $d950, $6aa8, $56a0, $9ad0, $4ae8, $4ae0,   //1910
        $a4d8, $a4d0, $d250, $d548, $b550, $56a0, $96d0, $95b0, $49b8, $49b0,   //1920
        $a4b0, $b258, $6a50, $6d40, $ada8, $2b60, $9570, $4978, $4970, $64b0,   //1930
        $d4a0, $ea50, $6d48, $5ad0, $2b60, $9370, $92e0, $c968, $c950, $d4a0,   //1940
        $da50, $b550, $56a0, $aad8, $25d0, $92d0, $c958, $a950, $b4a8, $6ca0,   //1950
        $b550, $55a8, $4da0, $a5b0, $52b8, $52b0, $a950, $e950, $6aa0, $ad50,   //1960
        $ab50, $4b60, $a570, $a570, $5260, $e930, $d950, $5aa8, $56a0, $96d0,   //1970
        $4ae8, $4ad0, $a4d0, $d268, $d250, $d528, $b540, $b6a0, $96d0, $95b0,   //1980
        $49b0, $a4b8, $a4b0, $b258, $6a50, $6d40, $ada0, $ab60, $9370, $4978,   //1990
        $4970, $64b0, $6a50, $ea50, $6b28, $5ac0, $ab60, $9368, $92e0, $c960,   //2000
        $d4a8, $d4a0, $da50, $5aa8, $56a0, $aad8, $25d0, $92d0, $c958, $a950,   //2010
        $b4a0, $b550, $b550, $55a8, $4ba0, $a5b0, $52b8, $52b0, $a930, $74a8,   //2020
        $6aa0, $ad50, $4da8, $4b60, $9570, $a4e0, $d260, $e930, $d530, $5aa0,   //2030
        $6b50, $96d0, $4ae8, $4ad0, $a4d0, $d258, $d250, $d520, $daa0, $b5a0,   //2040
        $56d0, $4ad8, $49b0, $a4b8, $a4b0, $aa50, $b528, $6d20, $ada0, $55b0);  //2050//数组gLanarMonth存放阴历1901年到2050年闰月的月份,如没有则为0,每字节存两年
      gLunarMonth:array[0..74] of Byte=(
        $00, $50, $04, $00, $20,   //1910
        $60, $05, $00, $20, $70,   //1920
        $05, $00, $40, $02, $06,   //1930
        $00, $50, $03, $07, $00,   //1940
        $60, $04, $00, $20, $70,   //1950
        $05, $00, $30, $80, $06,   //1960
        $00, $40, $03, $07, $00,   //1970
        $50, $04, $08, $00, $60,   //1980
        $04, $0a, $00, $60, $05,   //1990
        $00, $30, $80, $05, $00,   //2000
        $40, $02, $07, $00, $50,   //2010
        $04, $09, $00, $60, $04,   //2020
        $00, $20, $60, $05, $00,   //2030
        $30, $b0, $06, $00, $50,   //2040
        $02, $07, $00, $50, $03);  //2050
      

  7.   

    你吧Mail留下吧,长不好贴 ^o^
      

  8.   

    我的EMail是 :[email protected][email protected]
      谢谢!