请问那位大哥有关于农历中二十四节气的算法,请邮一份给小弟,谢谢
[email protected]

解决方案 »

  1.   

    unit Calendar;interfaceuses SysUtils,Windows;const
      START_YEAR=1901;
      END_YEAR=2050;function GetLunarHolDay(InDate:TDateTime):string;overload;
    function GetLunarHolDay(iYear,iMonth,iDay:Word):string;overload;//计算公历iYear年iMonth月iDay日对应的节气 0-24,0表不是节气
    function l_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;implementationvar//数组gLanarHoliDay存放每年的二十四节气对应的阳历日期
    //每年的二十四节气对应的阳历日期几乎固定,平均分布于十二个月中
    //   1月          2月         3月         4月         5月         6月
    //小寒 大寒   立春  雨水   惊蛰 春分   清明 谷雨   立夏 小满   芒种 夏至
    //   7月          8月         9月         10月       11月        12月
    //小暑 大暑   立秋  处暑   白露 秋分   寒露 霜降   立冬 小雪   大雪 冬至
    {***************************************************************************
    ******
     节气无任何确定规律,所以只好存表,要节省空间,所以....
    ****************************************************************************
    ******}
    //数据格式说明:
    //如1901年的节气为
    //  1月     2月     3月   4月    5月   6月   7月    8月   9月    10月  11月
    12月
    // 6, 21, 4, 19,  6, 21, 5, 21, 6,22, 6,22, 8, 23, 8, 24, 8, 24, 8, 24, 8,
    23, 8, 22
    // 9, 6,  11,4,   9, 6,  10,6,  9,7,  9,7,  7, 8,  7, 9,  7,  9, 7,  9, 7,
    8, 7, 15
    //上面第一行数据为每月节气对应日期,15减去每月第一个节气,每月第二个节气减去15
    得第二行
    // 这样每月两个节气对应数据都小于16,每月用一个字节存放,高位存放第一个节气数
    据,低位存放
    //第二个节气的数据,可得下表
      gLunarHolDay:array[0..1799] of Byte=(
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1901
        $96, $A4, $96, $96, $97, $87, $79, $79, $79, $69, $78, $78,   //1902
        $96, $A5, $87, $96, $87, $87, $79, $69, $69, $69, $78, $78,   //1903
        $86, $A5, $96, $A5, $96, $97, $88, $78, $78, $79, $78, $87,   //1904
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1905
        $96, $A4, $96, $96, $97, $97, $79, $79, $79, $69, $78, $78,   //1906
        $96, $A5, $87, $96, $87, $87, $79, $69, $69, $69, $78, $78,   //1907
        $86, $A5, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1908
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1909
        $96, $A4, $96, $96, $97, $97, $79, $79, $79, $69, $78, $78,   //1910
        $96, $A5, $87, $96, $87, $87, $79, $69, $69, $69, $78, $78,   //1911
        $86, $A5, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1912
        $95, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1913
        $96, $B4, $96, $A6, $97, $97, $79, $79, $79, $69, $78, $78,   //1914
        $96, $A5, $97, $96, $97, $87, $79, $79, $69, $69, $78, $78,   //1915
        $96, $A5, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1916
        $95, $B4, $96, $A6, $96, $97, $78, $79, $78, $69, $78, $87,   //1917
        $96, $B4, $96, $A6, $97, $97, $79, $79, $79, $69, $78, $77,   //1918
        $96, $A5, $97, $96, $97, $87, $79, $79, $69, $69, $78, $78,   //1919
        $96, $A5, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1920
        $95, $B4, $96, $A5, $96, $97, $78, $79, $78, $69, $78, $87,   //1921
        $96, $B4, $96, $A6, $97, $97, $79, $79, $79, $69, $78, $77,   //1922
        $96, $A4, $96, $96, $97, $87, $79, $79, $69, $69, $78, $78,   //1923
        $96, $A5, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1924
        $95, $B4, $96, $A5, $96, $97, $78, $79, $78, $69, $78, $87,   //1925
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1926
        $96, $A4, $96, $96, $97, $87, $79, $79, $79, $69, $78, $78,   //1927
        $96, $A5, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1928
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1929
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1930
        $96, $A4, $96, $96, $97, $87, $79, $79, $79, $69, $78, $78,   //1931
        $96, $A5, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1932
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1933
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1934
        $96, $A4, $96, $96, $97, $97, $79, $79, $79, $69, $78, $78,   //1935
        $96, $A5, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1936
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1937
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1938
        $96, $A4, $96, $96, $97, $97, $79, $79, $79, $69, $78, $78,   //1939
        $96, $A5, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1940
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1941
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1942
        $96, $A4, $96, $96, $97, $97, $79, $79, $79, $69, $78, $78,   //1943
        $96, $A5, $96, $A5, $A6, $96, $88, $78, $78, $78, $87, $87,   //1944
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1945
        $95, $B4, $96, $A6, $97, $97, $78, $79, $78, $69, $78, $77,   //1946
        $96, $B4, $96, $A6, $97, $97, $79, $79, $79, $69, $78, $78,   //1947
        $96, $A5, $A6, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //1948
        $A5, $B4, $96, $A5, $96, $97, $88, $79, $78, $79, $77, $87,   //1949
        $95, $B4, $96, $A5, $96, $97, $78, $79, $78, $69, $78, $77,   //1950
        $96, $B4, $96, $A6, $97, $97, $79, $79, $79, $69, $78, $78,   //1951
        $96, $A5, $A6, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //1952
        $A5, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1953
        $95, $B4, $96, $A5, $96, $97, $78, $79, $78, $68, $78, $87,   //1954
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1955
        $96, $A5, $A5, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //1956
        $A5, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1957
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1958
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1959
        $96, $A4, $A5, $A5, $A6, $96, $88, $88, $88, $78, $87, $87,   //1960
      

  2.   

    $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1961
        $96, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1962
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1963
        $96, $A4, $A5, $A5, $A6, $96, $88, $88, $88, $78, $87, $87,   //1964
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1965
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1966
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1967
        $96, $A4, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //1968
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1969
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1970
        $96, $B4, $96, $A6, $97, $97, $78, $79, $79, $69, $78, $77,   //1971
        $96, $A4, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //1972
        $A5, $B5, $96, $A5, $A6, $96, $88, $78, $78, $78, $87, $87,   //1973
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1974
        $96, $B4, $96, $A6, $97, $97, $78, $79, $78, $69, $78, $77,   //1975
        $96, $A4, $A5, $B5, $A6, $A6, $88, $89, $88, $78, $87, $87,   //1976
        $A5, $B4, $96, $A5, $96, $96, $88, $88, $78, $78, $87, $87,   //1977
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $78, $87,   //1978
        $96, $B4, $96, $A6, $96, $97, $78, $79, $78, $69, $78, $77,   //1979
        $96, $A4, $A5, $B5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //1980
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $77, $87,   //1981
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1982
        $95, $B4, $96, $A5, $96, $97, $78, $79, $78, $69, $78, $77,   //1983
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $87,   //1984
        $A5, $B4, $A6, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //1985
        $A5, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //1986
        $95, $B4, $96, $A5, $96, $97, $88, $79, $78, $69, $78, $87,   //1987
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //1988
        $A5, $B4, $A5, $A5, $A6, $96, $88, $88, $88, $78, $87, $87,   //1989
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $79, $77, $87,   //1990
        $95, $B4, $96, $A5, $86, $97, $88, $78, $78, $69, $78, $87,   //1991
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //1992
        $A5, $B3, $A5, $A5, $A6, $96, $88, $88, $88, $78, $87, $87,   //1993
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1994
        $95, $B4, $96, $A5, $96, $97, $88, $76, $78, $69, $78, $87,   //1995
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //1996
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //1997
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //1998
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //1999
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //2000
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2001
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //2002
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //2003
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //2004
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2005
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2006
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $69, $78, $87,   //2007
        $96, $B4, $A5, $B5, $A6, $A6, $87, $88, $87, $78, $87, $86,   //2008
        $A5, $B3, $A5, $B5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2009
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2010
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $78, $87,   //2011
        $96, $B4, $A5, $B5, $A5, $A6, $87, $88, $87, $78, $87, $86,   //2012
        $A5, $B3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $87,   //2013
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2014
        $95, $B4, $96, $A5, $96, $97, $88, $78, $78, $79, $77, $87,   //2015
        $95, $B4, $A5, $B4, $A5, $A6, $87, $88, $87, $78, $87, $86,   //2016
        $A5, $C3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $87,   //2017
        $A5, $B4, $A6, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2018
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $79, $77, $87,   //2019
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $78, $87, $86,   //2020
        $A5, $C3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //2021
        $A5, $B4, $A5, $A5, $A6, $96, $88, $88, $88, $78, $87, $87,   //2022
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $79, $77, $87,   //2023
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $78, $87, $96,   //2024
        $A5, $C3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //2025
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2026
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //2027
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $78, $87, $96,   //2028
        $A5, $C3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //2029
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2030
        $A5, $B4, $96, $A5, $96, $96, $88, $78, $78, $78, $87, $87,   //2031
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $78, $87, $96,   //2032
        $A5, $C3, $A5, $B5, $A6, $A6, $88, $88, $88, $78, $87, $86,   //2033
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $78, $88, $78, $87, $87,   //2034
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2035
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $78, $87, $96,   //2036
        $A5, $C3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $86,   //2037
        $A5, $B3, $A5, $A5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2038
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2039
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $78, $87, $96,   //2040
        $A5, $C3, $A5, $B5, $A5, $A6, $87, $88, $87, $78, $87, $86,   //2041
        $A5, $B3, $A5, $B5, $A6, $A6, $88, $88, $88, $78, $87, $87,   //2042
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2043
        $95, $B4, $A5, $B4, $A5, $A6, $97, $87, $87, $88, $87, $96,   //2044
        $A5, $C3, $A5, $B4, $A5, $A6, $87, $88, $87, $78, $87, $86,   //2045
        $A5, $B3, $A5, $B5, $A6, $A6, $87, $88, $88, $78, $87, $87,   //2046
        $A5, $B4, $96, $A5, $A6, $96, $88, $88, $78, $78, $87, $87,   //2047
        $95, $B4, $A5, $B4, $A5, $A5, $97, $87, $87, $88, $86, $96,   //2048
        $A4, $C3, $A5, $A5, $A5, $A6, $97, $87, $87, $78, $87, $86,   //2049
        $A5, $C3, $A5, $B5, $A6, $A6, $87, $88, $78, $78, $87, $87);  //2050function l_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
    var
      Flag:Byte;
      Day:Word;
    begin
      Flag:=gLunarHolDay[(iYear-START_YEAR)*12+iMonth-1];
      if iDay<15 then
        Day:=15-((Flag shr 4) and $0f)
      else
        Day:=(Flag and $0f)+15;
      if iDay=Day then
        if iDay>15 then
          Result:=(iMonth-1)*2+2
        else
          Result:=(iMonth-1)*2+1
      else
        Result:=0;
    end;function GetLunarHolDay(InDate:TDateTime):string;
    var
      i,iYear,iMonth,iDay:Word;
    begin
      DecodeDate(InDate,iYear,iMonth,iDay);
      i:=l_GetLunarHolDay(iYear,iMonth,iDay);
      case i of
        1:Result:='小寒';
        2:Result:='大寒';
        3:Result:='立春';
        4:Result:='雨水';
        5:Result:='惊蛰';
        6:Result:='春分';
        7:Result:='清明';
        8:Result:='谷雨';
        9:Result:='立夏';
        10:Result:='小满';
        11:Result:='芒种';
        12:Result:='夏至';
        13:Result:='小暑';
        14:Result:='大暑';
        15:Result:='立秋';
        16:Result:='处暑';
        17:Result:='白露';
        18:Result:='秋分';
        19:Result:='寒露';
        20:Result:='霜降';
        21:Result:='立冬';
        22:Result:='小雪';
        23:Result:='大雪';
        24:Result:='冬至';
      else
        Result:='';
      end;
    end;function GetLunarHolDay(iYear,iMonth,iDay:Word):string;
    begin
      Result:=GetLunarHolDay(EncodeDate(iYear,iMonth,iDay));
    end;end.
      

  3.   

    哇靠!都准备好了,Ctrl + C 然后 Ctrl + V 就搞定了。自愧不如!UP一下!