ค่าคงที่
START_YEAR=1901;
END_YEAR=2050;
//คืนจำนวนวันในเดือน iMonth ของปี iYear ปี 1 มกราคม---ธันวาคม 65535
functionMonthDays(iYear,iMonth:Word):Word;
//ส่งคืนจำนวนวันในปีจันทรคติ ปี iLunarYer และเดือนจันทรคติ iLunarMonth ถ้า iLunarMonth เป็นเดือนอธิกสุรทิน
//อักขระสูงคือจำนวนวันในเดือน iLunarMonth ที่สอง มิฉะนั้นอักขระสูงคือมกราคม 01901---ธันวาคม 2050
ฟังก์ชั่นLunarMonthDays(iLunarYear,iLunarMonth:Word):คำยาว;
//ส่งคืนจำนวนวันทั้งหมดในปีปฏิทินจันทรคติ iLunarYear ตั้งแต่เดือนมกราคม 1901 ถึงธันวาคม 2050
ฟังก์ชั่นLunarYearDays(iLunarYear:Word):Word;
//ส่งคืนเดือนอธิกสุรทินของปีปฏิทินจันทรคติ iLunarYear หากไม่ส่งคืน 01901 มกราคม---ธันวาคม 2593
functionGetLeapMonth(iLunarYear:Word):Word;
//จัดรูปแบบ iYear ให้เป็นสตริงที่แสดงโดยวิธีสัญลักษณ์ Tianqian
PROcedureFormatLunarYear(iYear:Word;varpBuffer:string);โอเวอร์โหลด;
functionFormatLunarYear(iYear:Word):string;overload;
//จัดรูปแบบ iMonth เป็นสตริงภาษาจีน
ขั้นตอนFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean=True);โอเวอร์โหลด;
functionFormatMonth(iMonth:Word;bLunar:Boolean=True):string;overload;
//จัดรูปแบบ iDay เป็นสตริงภาษาจีน
ขั้นตอน FormatLunarDay (iDay: Word; varpBuffer: string); โอเวอร์โหลด;
functionFormatLunarDay(iDay:Word):string;overload;
//คำนวณจำนวนวันระหว่างวันที่สองวันในปฏิทินเกรโกเรียน: 1 มกราคม 1 ปี---31 ธันวาคม 65535
functionCalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word=START_YEAR;iStartMonth:Word=1;iStartDay:Word=1):คำยาว;โอเวอร์โหลด;
functionCalcDateDiff(EndDate,StartDate:TDateTime):Longword;โอเวอร์โหลด;
//คำนวณวันจันทรคติที่สอดคล้องกับ iMonth เดือน iDay ในปฏิทินเกรกอเรียน iYear และส่งกลับเงื่อนไขสุริยคติทางจันทรคติที่สอดคล้องกัน 0-24
//1 มกราคม 2444---31 ธันวาคม 2593
functionGetLunarHolDay (InDate: TDateTime): สตริง; โอเวอร์โหลด;
functionGetLunarHolDay(iYear,iMonth,iDay:Word):string;overload;
//ฟังก์ชั่นส่วนตัว---------------------------------------------
//คำนวณวันจันทรคติหลังจากวัน iSpanDays ตั้งแต่วันที่ 1 มกราคม พ.ศ. 2444
Procedurel_CalcLunarDate(variYear,iMonth,iDay:Word;iSpanDays:Longword);
//คำนวณเงื่อนไขแสงอาทิตย์ 0-24 ที่สอดคล้องกับ iMonth, iDay, iYear ในปฏิทินเกรกอเรียน 0 หมายถึงไม่ใช่เงื่อนไขแสงอาทิตย์
functionl_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
การดำเนินการ
var
//อาร์เรย์ gLunarDay เก็บจำนวนเดือนและวันในแต่ละปีตั้งแต่ปี 1901 ถึง 2100 ในปฏิทินจันทรคติ
//ปฏิทินจันทรคติสามารถมีได้เพียง 29 หรือ 30 วันในหนึ่งเดือน และหนึ่งปีจะแสดงด้วยเลขฐานสอง 12 หลัก (หรือ 13) หลักที่สอดคล้องกันคือ 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 แต่ละไบต์จะถูกเก็บไว้เป็นเวลาสองปี
gLunarMonth:array[0..74]ของไบต์=(
$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 เก็บวันที่ในปฏิทินสุริยคติที่สอดคล้องกับเงื่อนไขสุริยคติยี่สิบสี่ของแต่ละปี
//วันที่ในปฏิทินสุริยคติที่สอดคล้องกับเงื่อนไขสุริยคติยี่สิบสี่ในแต่ละปีเกือบจะคงที่และกระจายอย่างเท่าเทียมกันในช่วงสิบสองเดือน
//มกราคม กุมภาพันธ์ มีนาคม เมษายน พฤษภาคม มิถุนายน
//หนาวเล็กน้อย หนาวมาก ต้นฤดูใบไม้ผลิ ฝน วันวสันตวิษุวัต ชิงหมิง ฝนเม็ด ต้นฤดูร้อน แมนจูเรียเล็ก ครีษมายัน
//กรกฎาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน ธันวาคม
//ฤดูร้อนเล็กน้อย ร้อนจัด ต้นฤดูใบไม้ร่วง ฤดูร้อน น้ำค้างสีขาว วันวสันตวิษุวัต น้ำค้างเย็น น้ำค้างแข็ง ต้นฤดูหนาว หิมะเบาบาง หิมะตกหนัก เหมายัน
{*************************************************** ***** *********************************
ไม่มีกฎตายตัวสำหรับเงื่อนไขพลังงานแสงอาทิตย์ ฉันจึงต้องบันทึกตารางเพื่อประหยัดพื้นที่ ดังนั้น...
************************************************** * *********************************}
// คำอธิบายรูปแบบข้อมูล:
//เช่น เทอมสุริยคติในปี 1901 คือ
//มกราคม กุมภาพันธ์ มีนาคม เมษายน พฤษภาคม มิถุนายน กรกฎาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน และธันวาคม
//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]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;
เริ่ม
caseiเดือน
1,3,5,7,8,10,12:ผลลัพธ์:=31;
4,6,9,11:ผลลัพธ์:=30;
2://หากเป็นปีอธิกสุรทิน
ifIsLeapYear(iYear)แล้ว
ผลลัพธ์:=29
อื่น
ผลลัพธ์:=28
อื่น
ผลลัพธ์:=0;
จบ;
จบ;
functionGetLeapMonth(iLunarYear:Word):Word;
var
ธง:ไบต์;
เริ่ม
ธง:=gLunarMonth[(iLunarYear-START_YEAR)div2];
ถ้า(iLunarYear-START_YEAR)mod2=0แล้ว
ผลลัพธ์:=Flagshr4
อื่น
ผลลัพธ์:=ธงและ$0F;
จบ;
ฟังก์ชั่นLunarMonthDays(iLunarYear,iLunarMonth:Word):คำยาว;
var
ความสูงต่ำ: คำ;
iBit:จำนวนเต็ม;
เริ่ม
ifiLunarYear<START_YEARจากนั้น
เริ่ม
ผลลัพธ์:=30;
ออก;
จบ;
ส่วนสูง:=0;
ต่ำ:=29;
iBit:=16-iLunarMonth;
ถ้า(iLunarMonth>GetLeapMonth(iLunarYear))และ(GetLeapMonth(iLunarYear)>0)แล้ว
ธ.ค.(iBit);
ถ้า(gLunarMonthDay[iLunarYear-START_YEAR]และ(1shliBit))>0แล้ว
Inc(ต่ำ);
ifiLunarMonth=GetLeapMonth(iLunarYear)จากนั้น
ถ้า(gLunarMonthDay[iLunarYear-START_YEAR]และ(1shl(iBit-1)))>0แล้ว
ส่วนสูง:=30
อื่น
ส่วนสูง:=29;
ผลลัพธ์:=MakeLong(ต่ำ,ความสูง);
จบ;
ฟังก์ชั่นLunarYearDays(iLunarYear:Word):Word;
var
วัน, i: Word;
tmp:คำยาว;
เริ่ม
วัน:=0;
fori:=1to12do
เริ่ม
tmp:=LunarMonthDays(iLunarYear,i);
วัน:=วัน+HiWord(tmp);
วัน:=วัน+LoWord(tmp);
จบ;
ผลลัพธ์:=วัน;
จบ;
ขั้นตอนFormatLunarYear(iYear:Word;varpBuffer:string);
var
szText1,szText2,szText3:สตริง;
เริ่ม
szText1:='A, B, C, D, อู๋, จี, เกิง, ซิน, เหรินกุ้ย';
szText2:='จือโจว หยินเหมาเฉิน ซีหวู่ไม่ได้สมัคร Youxuhai';
szText3:='หนู วัว เสือ มังกร งู ม้า แกะ ลิง ไก่ สุนัข และหมู';
pBuffer:=คัดลอก(szText1,((iYear-4)mod10)*2+1,2);
pBuffer:=pBuffer+คัดลอก(szText2,((iYear-4)mod12)*2+1,2);
pBuffer:=pBuffer+'';
pBuffer:=pBuffer+คัดลอก(szText3,((iYear-4)mod12)*2+1,2);
pBuffer:=pBuffer+'ปี';
จบ;
functionFormatLunarYear(iYear:Word):string;
var
pBuffer:สตริง;
เริ่ม
รูปแบบ LunarYear(iYear,pBuffer);
ผลลัพธ์:=pBuffer;
จบ;
ขั้นตอนFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean);
var
szText:สตริง;
เริ่ม
ถ้า(ไม่ใช่bLunar)และ(iMonth=1)แล้ว
เริ่ม
pBuffer:='มกราคม';
ออก;
จบ;
szText:='บวก สอง สาม สี่ ห้า หก เจ็ด แปด เก้าสิบ';
ifiเดือน<=10จากนั้น
เริ่ม
pBuffer:='';
pBuffer:=pBuffer+Copy(szText,(iMonth-1)*2+1,2);
pBuffer:=pBuffer+'เดือน';
ออก;
จบ;
ifiเดือน=11แล้ว
pBuffer:='สิบเอ็ด'
อื่น
pBuffer:='สิบสอง';
pBuffer:=pBuffer+'เดือน';
จบ;
functionFormatMonth(iMonth:Word;bLunar:Boolean):string;
var
pBuffer:สตริง;
เริ่ม
FormatMonth(iMonth,pBuffer,bLunar);
ผลลัพธ์:=pBuffer;
จบ;
ขั้นตอนFormatLunarDay(iDay:Word;varpBuffer:string);
var
szText1,szText2:สตริง;
เริ่ม
szText1:='วันที่ยี่สิบสามเดือนจันทรคติ';
szText2:='หนึ่งสองสามสี่ห้าหกเจ็ดแปดเก้าสิบ';
ถ้า(iDay<>20)และ(iDay<>30)แล้ว
เริ่ม
pBuffer:=Copy(szText1,((iDay-1)div10)*2+1,2);
pBuffer:=pBuffer+คัดลอก(szText2,((iDay-1)mod10)*2+1,2);
จบ
อื่น
เริ่ม
pBuffer:=Copy(szText1,(iDaydiv10)*2+1,2);
pBuffer:=pBuffer+'十';
จบ;
จบ;
functionFormatLunarDay(iDay:Word):string;
var
pBuffer:สตริง;
เริ่ม
FormatLunarDay(iDay,pBuffer);
ผลลัพธ์:=pBuffer;
จบ;
functionCalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word;iStartMonth:Word;iStartDay:Word):คำยาว;
เริ่ม
ผลลัพธ์:=Trunc(EncodeDate(iEndYear,iEndMonth,iEndDay)-EncodeDate(iStartYear,iStartMonth,iStartDay));
จบ;
functionCalcDateDiff(EndDate,StartDate:TDateTime):คำยาว;
เริ่ม
ผลลัพธ์:=Trunc(EndDate-StartDate);
จบ;
Procedurel_CalcLunarDate(variYear,iMonth,iDay:Word;iSpanDays:Longword);
var
tmp:คำยาว;
เริ่ม
//วันที่ 19 กุมภาพันธ์ พ.ศ. 2444 ตามปฏิทินสุริยคติเป็นวันแรกของเดือนจันทรคติแรก พ.ศ. 2444 ในปฏิทินจันทรคติ
//ในปฏิทินเกรกอเรียนมี 49 วัน ตั้งแต่วันที่ 1 มกราคม ถึง 19 กุมภาพันธ์ พ.ศ. 2444
ifiSpanDays<49แล้ว
เริ่ม
iYear:=START_YEAR-1;
ifiSpanDays<19แล้ว
เริ่ม
เดือน:=11;
iDay:=11+คำ(iSpanDays);
จบ
อื่น
เริ่ม
เดือน:=12;
iDay:=Word(iSpanDays)-18;
จบ;
ออก;
จบ;
//การคำนวณต่อไปนี้เริ่มตั้งแต่วันแรกของเดือนจันทรคติแรกปี 1901
iSpanDays:=iSpanDays-49;
iYear:=START_YEAR;
เดือน:=1;
iDay:=1;
//คำนวณปี
tmp:=วันจันทรคติ(iYear);
whileiSpanDays>=tmpdo
เริ่ม
iSpanDays:=iSpanDays-tmp;
อิงค์(iYear);
tmp:=วันจันทรคติ(iYear);
จบ;
//คำนวณเดือน
tmp:=LoWord(วันจันทรคติ(iYear,iMonth));
whileiSpanDays>=tmpdo
เริ่ม
iSpanDays:=iSpanDays-tmp;
ifiMonth=GetLeapMonth(iYear)จากนั้น
เริ่ม
tmp:=HiWord(วันจันทรคติ(iYear,iMonth));
ifiSpanDays<tmpthenBreak;
iSpanDays:=iSpanDays-tmp;
จบ;
Inc(เดือน);
tmp:=LoWord(วันจันทรคติ(iYear,iMonth));
จบ;
//คำนวณวัน
iDay:=iDay+Word(iSpanDays);
จบ;
functionl_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
var
ธง:ไบต์;
วัน:คำพูด;
เริ่ม
ธง:=gLunarHolDay[(iYear-START_YEAR)*12+iMonth-1];
ifiDay<15แล้ว
วัน:=15-((Flagshr4)และ$0f)
อื่น
วัน:=(ธงและ$0f)+15;
ifiDay=กลางวัน
ifiDay>15จากนั้น
ผลลัพธ์:=(iMonth-1)*2+2
อื่น
ผลลัพธ์:=(iMonth-1)*2+1
อื่น
ผลลัพธ์:=0;
จบ;
functionGetLunarHolDay(InDate:TDateTime):สตริง;
var
ฉัน, iYear, iMonth, iDay: Word;
เริ่ม
DecodeDate (InDate, iYear, iMonth, iDay);
i:=l_GetLunarHolDay(iYear,iMonth,iDay);
caseiof
1:ผลลัพธ์:='เสี่ยวฮั่น';
2:ผลลัพธ์:='เย็นมาก';
3:ผลลัพธ์:='จุดเริ่มต้นของฤดูใบไม้ผลิ';
4:ผลลัพธ์:='ฝน';
5:ผลลัพธ์:='จิงเจ๋อ';
6:ผลลัพธ์:='วิษุวัตวิษุวัต';
7:ผลลัพธ์:='ชิงหมิง';
8:ผลลัพธ์:='กู่หยู';
9:ผลลัพธ์:='เริ่มต้นฤดูร้อน';
10:ผลลัพธ์:='เซียวมาน';
11:Result:='awn สายพันธุ์';
12:ผลลัพธ์:='ครีษมายัน';
13:ผลลัพธ์:='ความร้อนเล็กน้อย';
14:ผลลัพธ์:='ความร้อนแรง';
15:ผลลัพธ์:='จุดเริ่มต้นของฤดูใบไม้ร่วง';
16:ผลลัพธ์:='สิ้นสุดฮีต';
17:ผลลัพธ์:='น้ำค้างสีขาว';
18:ผลลัพธ์:='วิษุวัตฤดูใบไม้ร่วง';
19:ผลลัพธ์:='น้ำค้างเย็น';
20:ผลลัพธ์:='ฟรอสต์';
21:ผลลัพธ์:='เริ่มต้นฤดูหนาว';
22:ผลลัพธ์:='เสี่ยวเสวี่ย';
23:ผลลัพธ์:='หิมะตกหนัก';
24:ผลลัพธ์:='ครีษมายัน';
อื่น
l_CalcLunarDate(iYear,iMonth,iDay,CalcDateDiff(InDate,EncodeDate(START_YEAR,1,1)));
ผลลัพธ์:=trim(FormatMonth(iMonth)+FormatLunarDay(iDay));
จบ;
จบ;
functionGetLunarHolDay(iYear,iMonth,iDay:Word):string;
เริ่ม
ผลลัพธ์:=GetLunarHolDay(EncodeDate(iYear,iMonth,iDay));
จบ;
จบ.