定数
START_YEAR=1901;
END_YEAR=2050;
//iMonth の月の日数を返します iyear year 1 年 1 月 ---12 月 65535
functionMonthDays(iyear,iMonth:Word):Word;
// 太陰暦 iLunarYer year と太陰月 iLunarMonth の日数を返します。 iLunarMonth が閏月の場合、
//上位文字は iLunarMonth の 2 番目の月の日数です。それ以外の場合、上位文字は 01901 年 1 月 ---2050 年 12 月です。
functionLunarMonthDays(iLunar Year,iLunarMonth:Word):Longword;
//1901 年 1 月から 2050 年 12 月までの旧暦 iLunar Year の合計日数を返します。
functionLunar YearDays(iLunar Year:Word):Word;
// 旧暦 iLunar Year の閏月を返します。そうでない場合は 01901 2050 年 1 月 ---12 月を返します
functionGetLeapMonth(iLunar Year:Word):Word;
// iyear を Tianqian 表記法で表される文字列にフォーマットします
PROcedureFormatLunar Year(i Year:Word;varpBuffer:string);オーバーロード;
functionFormatLunar Year(i Year:Word):文字列;オーバーロード;
//iMonth を中国語の文字列にフォーマットします
procedureFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean=True);オーバーロード;
functionFormatMonth(iMonth:Word;bLunar:Boolean=True):文字列;オーバーロード;
//iDay を中国語の文字列にフォーマットします
プロシージャFormatLunarDay(iDay:Word;varpBuffer:string);オーバーロード;
functionFormatLunarDay(iDay:Word):文字列;オーバーロード;
//グレゴリオ暦で 2 つの日付間の日数を計算します: 1 年 1 月 1 日---65535 年 12 月 31 日
functionCalcDateDiff(iEnd Year,iEndMonth,iEndDay:Word;iStart Year:Word=START_YEAR;iStartMonth:Word=1;iStartDay:Word=1):Longword;オーバーロード;
functionCalcDateDiff(EndDate,StartDate:TDateTime):Longword;オーバーロード;
//グレゴリオ暦 iyear の iMonth 月 iDay に対応する太陰暦の日付を計算し、対応する太陰太陽暦 0 ~ 24 を返します。
//1901 年 1 月 1 日---2050 年 12 月 31 日
functionGetLunarHolDay(InDate:TDateTime):文字列;オーバーロード;
functionGetLunarHolDay(i Year,iMonth,iDay:Word):文字列;オーバーロード;
//プライベート関数--------------------------------------
//1901 年 1 月 1 日から iSpanDays 日後の旧暦の日付を計算します
プロシージャl_CalcLunarDate(vari Year,iMonth,iDay:Word;iSpanDays:Longword);
//グレゴリオ暦の iMonth、iDay、iyear に対応する太陽節 0 ~ 24 を計算します。0 は太陽節ではないことを意味します
functionl_GetLunarHolDay(i Year,iMonth,iDay:Word):Word;
実装
変数
// 配列 gLunarDay には、旧暦の 1901 年から 2100 年までの各年の月数と日数が格納されます。
//太陰暦は 1 か月に 29 日または 30 日しかなく、1 年は 12 (または 13) の 2 進数で表されます。対応する桁は 1 (30 日)、それ以外の場合は 29 日です。
gLunarMonthDay:array[0..149]ofWord=(
//テストデータは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 になります。各バイトは 2 年間格納されます。
gLunarMonth:array[0..74]ofByte=(
$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
//配列 gLanarHoliDay には、各年の二十四節気に対応する太陽暦の日付が格納されます。
//各年の二十四節気に対応する太陽暦の日付はほぼ固定されており、12 か月に均等に分布します。
//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 から各月の最初の太陽節を減算し、各月の 2 番目の太陽節から 15 を引いて 2 行目を取得します。
//このように、各月の 2 つの節気の対応するデータは 16 未満であり、各月は 1 バイトに格納されます。上位ビットには最初の節気データが格納され、下位ビットにはそれが格納されます。
//第二節のデータは以下の表から取得できます
gLunarHolDay:array[0..1799]ofByte=(
$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
$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);//2050
functionMonthDays(iyear,iMonth:Word):Word;
始める
ケースイ月
1,3,5,7,8,10,12:結果:=31;
4,6,9,11:結果:=30;
2://うるう年の場合
ifIsLeap Year(i Year)then
結果:=29
それ以外
結果:=28
それ以外
結果:=0;
終わり;
終わり;
functionGetLeapMonth(iLunar Year:Word):Word;
変数
フラグ:バイト;
始める
フラグ:=gLunarMonth[(iLunar Year-START_YEAR)div2];
if(iLunar Year-START_YEAR)mod2=0then
結果:=Flagshr4
それ以外
結果:=フラガンド$0F;
終わり;
functionLunarMonthDays(iLunar Year,iLunarMonth:Word):Longword;
変数
高さ、低さ:単語;
iBit:整数;
始める
ifiLunar Year<START_YEARthen
始める
結果:=30;
出口;
終わり;
高さ:=0;
低:=29;
iBit:=16-iLunarMonth;
if(iLunarMonth>GetLeapMonth(iLunar Year))and(GetLeapMonth(iLunar Year)>0)then
12 月 (iBit);
if(gLunarMonthDay[iLunar Year-START_YEAR]and(1shliBit))>0then
Inc(低);
ifiLunarMonth=GetLeapMonth(iLunar Year)then
if(gLunarMonthDay[iLunar Year-START_YEAR]and(1shl(iBit-1)))>0then
身長:=30
それ以外
身長:=29;
結果:=MakeLong(低,高さ);
終わり;
functionLunar YearDays(iLunar Year:Word):Word;
変数
日、i:単語;
tmp:ロングワード;
始める
日数:=0;
fori:=1to12do
始める
tmp:=LunarMonthDays(iLunar Year,i);
日数:= 日数+HiWord(tmp);
日数:= 日数+LoWord(tmp);
終わり;
結果:= 日数;
終わり;
プロシージャ形式Lunar Year(i Year:Word;varpBuffer:string);
変数
szText1、szText2、szText3:文字列;
始める
szText1:='A、B、C、D、Wu、Ji、Geng、Xin、Rengui';
szText2:='子チョウ・インマオチェン・シウはヨウシュハイを申請していません';
szText3:='ネズミ、ウシ、トラ、ドラゴン、ヘビ、ウマ、ヒツジ、サル、ニワトリ、イヌ、ブタ';
pBuffer:=Copy(szText1,((iyear-4)mod10)*2+1,2);
pBuffer:=pBuffer+Copy(szText2,((iyear-4)mod12)*2+1,2);
pBuffer:=pBuffer+'';
pBuffer:=pBuffer+Copy(szText3,((iyear-4)mod12)*2+1,2);
pBuffer:=pBuffer+'年';
終わり;
functionFormatLunar Year(i Year:Word):文字列;
変数
pBuffer:文字列;
始める
FormatLunaryear(iyear,pBuffer);
結果:=pBuffer;
終わり;
processFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean);
変数
szText:文字列;
始める
if(notbLunar)and(iMonth=1)then
始める
pBuffer:='1 月';
出口;
終わり;
szText:='正の 2、3、4、5、6、7、8、90';
ifiMonth<=10then
始める
pBuffer:='';
pBuffer:=pBuffer+Copy(szText,(iMonth-1)*2+1,2);
pBuffer:=pBuffer+'月';
出口;
終わり;
ifiMonth=11then
pBuffer:='イレブン'
それ以外
pBuffer:='12';
pBuffer:=pBuffer+'月';
終わり;
functionFormatMonth(iMonth:Word;bLunar:Boolean):string;
変数
pBuffer:文字列;
始める
FormatMonth(iMonth,pBuffer,bLunar);
結果:=pBuffer;
終わり;
プロシージャフォーマットLunarDay(iDay:Word;varpBuffer:string);
変数
szText1、szText2:文字列;
始める
szText1:='陰暦の月 23 日';
szText2:='1、2、3、4、5、6、7、8、90';
if(iDay<>20)and(iDay<>30)then
始める
pBuffer:=Copy(szText1,((iDay-1)div10)*2+1,2);
pBuffer:=pBuffer+Copy(szText2,((iDay-1)mod10)*2+1,2);
終わり
それ以外
始める
pBuffer:=Copy(szText1,(iDaydiv10)*2+1,2);
pBuffer:=pBuffer+'十';
終わり;
終わり;
functionFormatLunarDay(iDay:Word):文字列;
変数
pBuffer:文字列;
始める
FormatLunarDay(iDay,pBuffer);
結果:=pBuffer;
終わり;
functionCalcDateDiff(iEnd Year,iEndMonth,iEndDay:Word;iStart Year:Word;iStartMonth:Word;iStartDay:Word):Longword;
始める
結果:=Trunc(EncodeDate(iEnd Year,iEndMonth,iEndDay)-EncodeDate(iStart Year,iStartMonth,iStartDay));
終わり;
functionCalcDateDiff(EndDate,StartDate:TDateTime):Longword;
始める
結果:=Trunc(終了日-開始日);
終わり;
プロシージャl_CalcLunarDate(vari Year,iMonth,iDay:Word;iSpanDays:Longword);
変数
tmp:ロングワード;
始める
//太陽暦の 1901 年 2 月 19 日は、旧暦の 1901 年の最初の太陰月の初日です
//グレゴリオ暦には 1901 年 1 月 1 日から 2 月 19 日まで 49 日あります
ifSpanDays<49then
始める
i年:=START_YEAR-1;
ifiSpanDays<19then
始める
iMonth:=11;
iDay:=11+Word(iSpanDays);
終わり
それ以外
始める
iMonth:=12;
iDay:=Word(iSpanDays)-18;
終わり;
出口;
終わり;
//以下の計算は 1901 年の旧暦の最初の月の 1 日から始まります
iSpanDays:=iSpanDays-49;
i年:=START_YEAR;
iMonth:=1;
iDay:=1;
//年を計算する
tmp:=LunaryearDays(iyear);
whileiSpanDays>=tmpdo
始める
iSpanDays:=iSpanDays-tmp;
Inc(i年);
tmp:=LunaryearDays(iyear);
終わり;
//月を計算する
tmp:=LoWord(LunarMonthDays(iyear,iMonth));
whileiSpanDays>=tmpdo
始める
iSpanDays:=iSpanDays-tmp;
ifiMonth=GetLeapMonth(iyear)then
始める
tmp:=HiWord(LunarMonthDays(iyear,iMonth));
ifiSpanDays<tmpthenBreak;
iSpanDays:=iSpanDays-tmp;
終わり;
Inc(iMonth);
tmp:=LoWord(LunarMonthDays(iyear,iMonth));
終わり;
//日を計算する
iDay:=iDay+Word(iSpanDays);
終わり;
functionl_GetLunarHolDay(i Year,iMonth,iDay:Word):Word;
変数
フラグ:バイト;
曜日:単語;
始める
フラグ:=gLunarHolDay[(i年-START_YEAR)*12+iMonth-1];
ifiDay<15then
日:=15-((Flagshr4)and$0f)
それ以外
日:=(フラガンド$0f)+15;
ifiDay=デイゼン
ifiDay>15then
結果:=(iMonth-1)*2+2
それ以外
結果:=(iMonth-1)*2+1
それ以外
結果:=0;
終わり;
functionGetLunarHolDay(InDate:TDateTime):string;
変数
i、i年、i月、i日:単語;
始める
DecodeDate(InDate,i Year,iMonth,iDay);
i:=l_GetLunarHolDay(i Year,iMonth,iDay);
ケースイオフ
1:結果:='シャオハン';
2:結果:='大寒波';
3:結果:='春の始まり';
4:結果:='雨';
5:結果:='啓蟄';
6:結果:='春分';
7:結果:='清明';
8:結果:='Gu Yu';
9:結果:='夏の始まり';
10:結果:='シャオマン';
11:結果:='芒種';
12:結果:='夏至';
13:結果:='少し熱';
14:結果:='大暑';
15:結果:='秋の始まり';
16:結果:='ヒート終了';
17:結果:='白露';
18:結果:='秋分';
19:結果:='冷たい露';
20:結果:='フロスト';
21:結果:='冬の始まり';
22:結果:='Xiaoxue';
23:結果:='大雪';
24:結果:='冬至';
それ以外
l_CalcLunarDate(iyear,iMonth,iDay,CalcDateDiff(InDate,EncodeDate(START_YEAR,1,1)));
結果:=trim(FormatMonth(iMonth)+FormatLunarDay(iDay));
終わり;
終わり;
functionGetLunarHolDay(i Year,iMonth,iDay:Word):string;
始める
結果:=GetLunarHolDay(EncodeDate(iyear,iMonth,iDay));
終わり;
終わり。