konstanta
START_TAHUN=1901;
END_YEAR=2050;
//Kembalikan jumlah hari dalam iMonth bulan iYear tahun 1 tahun Januari---Desember 65535
functionMonthDays(iYear,iMonth:Word):Word;
//Mengembalikan jumlah hari pada tahun lunar tahun iLunarYer dan bulan lunar iLunarMonth. Jika iLunarMonth adalah bulan kabisat,
//Karakter tertinggi adalah jumlah hari di bulan kedua iLunarMonth, jika tidak, karakter tertinggi adalah Januari 01901---Desember 2050
functionLunarMonthDays(iLunarYear,iLunarMonth:Word):Kata Panjang;
//Kembalikan jumlah total hari dalam tahun kalender lunar iLunarYear dari Januari 1901 hingga Desember 2050
functionLunarYearDays(iLunarYear:Word):Word;
//Kembalikan bulan kabisat dari tahun kalender lunar iLunarYear, jika tidak mengembalikan 01901 Januari---Desember 2050
functionGetLeapMonth(iLunarYear:Word):Word;
//Format iYear menjadi string yang diwakili oleh metode notasi Tianqian
PROcedureFormatLunarYear(iYear:Word;varpBuffer:string);overload;
functionFormatLunarYear(iYear:Word):string;kelebihan beban;
//Format iMonth ke dalam string berbahasa Mandarin
procedureFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean=True);kelebihan beban;
functionFormatMonth(iMonth:Word;bLunar:Boolean=True):string;kelebihan beban;
//Format iDay ke dalam string berbahasa Mandarin
procedureFormatLunarDay(iDay:Word;varpBuffer:string);overload;
functionFormatLunarDay(iDay:Word):string;kelebihan beban;
//Hitung jumlah hari antara dua tanggal dalam kalender Masehi: 1 Januari 1 tahun---31 Desember 65535
functionCalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word=START_YEAR;iStartMonth:Word=1;iStartDay:Word=1):Kata Panjang;kelebihan beban;
functionCalcDateDiff(Tanggal Akhir,Tanggal Mulai:TDateTime):Kata Panjang;kelebihan beban;
//Hitung tanggal lunar yang sesuai dengan iMonth bulan iDay di kalender Gregorian iYear, dan kembalikan istilah solar lunar yang sesuai 0-24
//1 Januari 1901---31 Desember 2050
functionGetLunarHolDay(InDate:TDateTime):string;kelebihan beban;
functionGetLunarHolDay(iYear,iMonth,iDay:Word):string;kelebihan beban;
//fungsi pribadi-----------------------------------------
//Hitung tanggal lunar setelah hari iSpanDays mulai 1 Januari 1901
procedurel_CalcLunarDate(variYear,iMonth,iDay:Word;iSpanDays:Longword);
//Hitung istilah matahari 0-24 yang sesuai dengan iMonth, iDay, iYear dalam kalender Masehi, 0 berarti bukan istilah matahari
functionl_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
pelaksanaan
var
//Array gLunarDay menyimpan jumlah bulan dan hari di setiap tahun dari tahun 1901 hingga 2100 dalam kalender lunar,
//Kalender lunar hanya dapat memiliki 29 atau 30 hari dalam satu bulan, dan satu tahun diwakili oleh 12 (atau 13) digit biner. Digit yang sesuai adalah 1, yang berarti 30 hari, jika tidak maka akan menjadi 29 hari.
gLunarMonthDay:array[0..149]ofWord=(
//Data pengujian hanya 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
//Array gLanarMonth menyimpan bulan pada bulan kabisat dari tahun 1901 hingga 2050 dalam kalender lunar. Jika tidak ada bulan kabisat, maka nilainya adalah 0. Setiap byte disimpan selama dua tahun.
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
//Array gLanarHoliDay menyimpan tanggal kalender matahari yang sesuai dengan dua puluh empat istilah matahari setiap tahun.
//Tanggal kalender matahari yang sesuai dengan dua puluh empat istilah matahari setiap tahun hampir tetap dan merata dalam dua belas bulan.
//Januari Februari Maret April Mei Juni
//Dingin Kecil, Dingin Besar, Awal Musim Semi, Hujan, Ekuinoks Musim Semi, Qingming, Hujan Butir, Awal Musim Panas, Manchuria Kecil, Titik Balik Matahari Musim Panas
//Juli, Agustus, September, Oktober, November, Desember
//Sedikit musim panas, panas terik, awal musim gugur, musim panas, embun putih, ekuinoks musim gugur, embun dingin, embun beku, awal musim dingin, salju ringan, salju lebat, titik balik matahari musim dingin
{****************************************************** ***** **********************************
Tidak ada aturan pasti untuk istilah matahari, jadi saya harus menyimpan tabel untuk menghemat ruang, jadi...
******************************************************* * **********************************}
//Deskripsi format data:
//Misalnya, istilah matahari pada tahun 1901 adalah
//Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, dan Desember
//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
//Data baris pertama di atas adalah tanggal yang sesuai dengan istilah matahari bulanan, 15 dikurangi istilah matahari pertama setiap bulan, dan istilah matahari kedua setiap bulan dikurangi 15 untuk mendapatkan baris kedua
//Dengan cara ini, data yang sesuai dari dua istilah matahari setiap bulan kurang dari 16, dan setiap bulan disimpan dalam satu byte. Bit tinggi menyimpan data istilah matahari pertama, dan bit rendah menyimpannya.
//Data istilah matahari kedua dapat diperoleh dari tabel berikut
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;
mulai
caseiMonthof
1,3,5,7,8,10,12:Hasil:=31;
4,6,9,11:Hasil:=30;
2://Jika ini adalah tahun kabisat
ifIsLeapYear(iYear)lalu
Hasil:=29
kalau tidak
Hasil:=28
kalau tidak
Hasil:=0;
akhir;
akhir;
functionGetLeapMonth(iLunarYear:Word):Word;
var
Bendera:Byte;
mulai
Bendera:=gLunarMonth[(iLunarYear-START_YEAR)div2];
if(iLunarYear-START_YEAR)mod2=0maka
Hasil:=Flagshr4
kalau tidak
Hasil:=Bendera$0F;
akhir;
functionLunarMonthDays(iLunarYear,iLunarMonth:Word):Kata Panjang;
var
Tinggi, Rendah: Kata;
iBit:Bilangan Bulat;
mulai
ifiLunarYear<START_YEARlalu
mulai
Hasil:=30;
KELUAR;
akhir;
Tinggi:=0;
Rendah:=29;
iBit:=16-iBulan Bulan;
jika(iLunarMonth>GetLeapMonth(iLunarYear))dan(GetLeapMonth(iLunarYear)>0)maka
Des(iBit);
if(gLunarMonthDay[iLunarYear-START_YEAR]dan(1shliBit))>0then
Inc (Rendah);
ifiLunarMonth=DapatkanLeapMonth(iLunarYear)lalu
if(gLunarMonthDay[iLunarYear-START_YEAR]dan(1shl(iBit-1)))>0then
Tinggi:=30
kalau tidak
Tinggi:=29;
Hasil:=MakeLong(Rendah,Tinggi);
akhir;
functionLunarYearDays(iLunarYear:Word):Word;
var
Hari,saya:Kata;
tmp:Kata Panjang;
mulai
Hari:=0;
fori:=1to12do
mulai
tmp:=HariBulan Bulan(iTahunBulan,i);
Hari:=Hari+HiWord(tmp);
Hari:=Hari+LoWord(tmp);
akhir;
Hasil:=Hari;
akhir;
procedureFormatLunarYear(iYear:Word;varpBuffer:string);
var
szTeks1,szTeks2,szTeks3:string;
mulai
szText1:='A, B, C, D, Wu, Ji, Geng, Xin, Rengui';
szText2:='Zichou Yinmaochen Siwu belum melamar Youxuhai';
szText3:='Tikus, lembu, harimau, naga, ular, kuda, domba, monyet, ayam, anjing, dan babi';
pBuffer:=Salin(szText1,((iTahun-4)mod10)*2+1,2);
pBuffer:=pBuffer+Salin(szText2,((iTahun-4)mod12)*2+1,2);
pBuffer:=pBuffer+'';
pBuffer:=pBuffer+Salin(szText3,((iTahun-4)mod12)*2+1,2);
pBuffer:=pBuffer+'tahun';
akhir;
functionFormatLunarYear(iYear:Word):string;
var
pBuffer:string;
mulai
FormatTahun Bulan(iTahun,pBuffer);
Hasil:=pBuffer;
akhir;
procedureFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean);
var
szTeks:string;
mulai
jika(bukanbBulan)dan(iBulan=1)maka
mulai
pBuffer:='Januari';
KELUAR;
akhir;
szText:='positif dua, tiga, empat, lima, enam, tujuh, delapan, sembilan puluh';
ifiBulan<=10lalu
mulai
pBuffer:='';
pBuffer:=pBuffer+Salin(szTeks,(iBulan-1)*2+1,2);
pBuffer:=pBuffer+'bulan';
KELUAR;
akhir;
ifiBulan=11lalu
pBuffer:='Sebelas'
kalau tidak
pBuffer:='dua belas';
pBuffer:=pBuffer+'bulan';
akhir;
functionFormatMonth(iMonth:Word;bLunar:Boolean):string;
var
pBuffer:string;
mulai
FormatBulan(iBulan,pBuffer,bLunar);
Hasil:=pBuffer;
akhir;
procedureFormatLunarDay(iDay:Word;varpBuffer:string);
var
szTeks1,szTeks2:string;
mulai
szText1:='Tanggal dua puluh tiga pada bulan penanggalan lunar';
szText2:='satu dua tiga empat lima enam tujuh delapan sembilan puluh';
jika(iDay<>20)dan(iDay<>30)lalu
mulai
pBuffer:=Salin(szText1,((iDay-1)div10)*2+1,2);
pBuffer:=pBuffer+Salin(szText2,((iDay-1)mod10)*2+1,2);
akhir
kalau tidak
mulai
pBuffer:=Salin(szText1,(iDaydiv10)*2+1,2);
pBuffer:=pBuffer+'十';
akhir;
akhir;
functionFormatLunarDay(iDay:Word):string;
var
pBuffer:string;
mulai
FormatLunarDay(iDay,pBuffer);
Hasil:=pBuffer;
akhir;
functionCalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word;iStartMonth:Word;iStartDay:Word):Kata Panjang;
mulai
Hasil:=Trunc(EncodeDate(iEndYear,iEndMonth,iEndDay)-EncodeDate(iStartYear,iStartMonth,iStartDay));
akhir;
functionCalcDateDiff(Tanggal Akhir,Tanggal Mulai:TDateTime):Kata Panjang;
mulai
Hasil:=Trunc(Tanggal Akhir-Tanggal Mulai);
akhir;
procedurel_CalcLunarDate(variYear,iMonth,iDay:Word;iSpanDays:Longword);
var
tmp:Kata Panjang;
mulai
//19 Februari 1901 dalam kalender matahari adalah hari pertama bulan lunar pertama tahun 1901 dalam kalender lunar
//Ada 49 hari dalam kalender Gregorian dari 1 Januari hingga 19 Februari 1901
ifiSpanDays<49lalu
mulai
iTahun:=START_TAHUN-1;
ifiSpanDays<19lalu
mulai
iBulan:=11;
iDay:=11+Kata(iSpanDays);
akhir
kalau tidak
mulai
iBulan:=12;
iDay:=Kata(iSpanDays)-18;
akhir;
KELUAR;
akhir;
//Perhitungan berikut dimulai dari hari pertama bulan lunar pertama tahun 1901
iSpanDays:=iSpanDays-49;
iTahun:=START_YEAR;
iBulan:=1;
iHari:=1;
//menghitung tahun
tmp:=HariTahun Bulan(iTahun);
sementaraiSpanDays>=tmpdo
mulai
iSpanDays:=iSpanDays-tmp;
Inc(iTahun);
tmp:=HariTahun Bulan(iTahun);
akhir;
//Hitung bulan
tmp:=LoWord(LunarMonthDays(iYear,iMonth));
sementaraiSpanDays>=tmpdo
mulai
iSpanDays:=iSpanDays-tmp;
ifiMonth=GetLeapMonth(iYear)lalu
mulai
tmp:=HiWord(LunarMonthDays(iYear,iMonth));
ifiSpanDays<tmpthenBreak;
iSpanDays:=iSpanDays-tmp;
akhir;
Inc(iBulan);
tmp:=LoWord(LunarMonthDays(iYear,iMonth));
akhir;
//Hitung hari
iDay:=iDay+Word(iSpanDays);
akhir;
functionl_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
var
Bendera:Byte;
Hari:Kata;
mulai
Bendera:=gLunarHolDay[(iYear-START_YEAR)*12+iMonth-1];
ifiDay<15then
Hari:=15-((Flagshr4)dan$0f)
kalau tidak
Hari:=(Bendera$0f)+15;
ifiDay=Hari kemudian
jikahari>15lalu
Hasil:=(iBulan-1)*2+2
kalau tidak
Hasil:=(iBulan-1)*2+1
kalau tidak
Hasil:=0;
akhir;
functionGetLunarHolDay(InDate:TDateTime):string;
var
i,iTahun,iBulan,iDay:Word;
mulai
DecodeDate(Tanggal Masuk,iTahun,iBulan,iDay);
i:=l_GetLunarHolDay(iTahun,iBulan,iDay);
caseiof
1:Hasil:='Xiaohan';
2:Hasil:='Dingin Besar';
3:Hasil:='Awal Musim Semi';
4:Hasil:='Hujan';
5:Hasil:='Jingzhe';
6:Hasil:='Ekuinoks Musim Semi';
7:Hasil:='Qingming';
8:Hasil:='Gu Yu';
9:Hasil:='Awal Musim Panas';
10:Hasil:='Xiaoman';
11:Hasil:='spesies tenda';
12:Hasil:='Titik Balik Matahari Musim Panas';
13:Hasil:='Sedikit Panas';
14:Hasil:='Panas Hebat';
15:Hasil:='Awal Musim Gugur';
16:Hasil:='Akhir Panas';
17:Hasil:='Embun Putih';
18:Hasil:='Ekuinoks Musim Gugur';
19:Hasil:='Embun Dingin';
20:Hasil:='Embun beku';
21:Hasil:='Awal Musim Dingin';
22:Hasil:='Xiaoxue';
23:Hasil:='Salju Lebat';
24:Hasil:='Titik Balik Matahari Musim Dingin';
kalau tidak
l_CalcLunarDate(iYear,iMonth,iDay,CalcDateDiff(InDate,EncodeDate(START_YEAR,1,1)));
Hasil:=trim(FormatMonth(iMonth)+FormatLunarDay(iDay));
akhir;
akhir;
functionGetLunarHolDay(iYear,iMonth,iDay:Word):string;
mulai
Hasil:=GetLunarHolDay(EncodeDate(iYear,iMonth,iDay));
akhir;
akhir.