ثابت
START_YEAR=1901;
END_YEAR=2050;
// إرجاع عدد الأيام في شهر iMonth من iYear year 1 year يناير---ديسمبر 65535
functionMonthDays(iYear,iMonth:Word):Word;
// إرجاع عدد الأيام في السنة القمرية iLunarYer والشهر القمري iLunarMonth إذا كان iLunarMonth شهرًا كبيسًا.
// الحرف العالي هو عدد الأيام في شهر iLunarMonth الثاني، وإلا فإن الحرف العالي هو يناير 01901 --- ديسمبر 2050
functionLunarMonthDays(iLunarYear,iLunarMonth:Word):Longword;
// إرجاع إجمالي عدد الأيام في السنة التقويمية القمرية iLunarYear من يناير 1901 إلى ديسمبر 2050
functionLunarYearDays(iLunarYear:Word):Word;
// إرجاع الشهر الكبيس للسنة التقويمية القمرية iLunarYear، إذا لم يتم إرجاع 01901 يناير --- ديسمبر 2050
functionGetLeapMonth(iLunarYear:Word):Word;
// قم بتنسيق iYear في سلسلة ممثلة بطريقة تدوين Tianqian
PROcedureFormatLunarYear(iYear:Word;varpBuffer:string);overload;
functionFormatLunarYear(iYear:Word):string;overload;
// تنسيق iMonth في السلسلة الصينية
الإجراءFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean=True);overload;
functionFormatMonth(iMonth:Word;bLunar:Boolean=True):string;overload;
// تنسيق iDay في السلسلة الصينية
الإجراءFormatLunarDay(iDay:Word;varpBuffer:string);overload;
functionFormatLunarDay(iDay:Word):string;overload;
// احسب عدد الأيام بين تاريخين في التقويم الغريغوري: 1 يناير، سنة واحدة --- 31 ديسمبر 65535
functionCalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word=START_YEAR;iStartMonth:Word=1;iStartDay:Word=1):Longword;overload;
functionCalcDateDiff(EndDate,StartDate:TDateTime):Longword;overload;
// احسب التاريخ القمري الموافق لشهر iMonth iDay في التقويم الغريغوري iYear، وأرجع المصطلحات الشمسية القمرية المقابلة 0-24
// 1 يناير 1901 --- 31 ديسمبر 2050
functionGetLunarHolDay(InDate:TDateTime):string;overload;
functionGetLunarHolDay(iYear,iMonth,iDay:Word):string;overload;
// وظيفة خاصة -----------------------------------------
// احسب التاريخ القمري بعد أيام iSpanDays من 1 يناير 1901
الإجراء_CalcLunarDate(variYear,iMonth,iDay:Word;iSpanDays:Longword);
// احسب المصطلحات الشمسية من 0 إلى 24 المقابلة لـ iMonth وiDay وiYear في التقويم الغريغوري، 0 يعني أنه ليس مصطلحًا شمسيًا
functionl_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
تطبيق
فار
// تخزن المصفوفة 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]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 بتخزين تواريخ التقويم الشمسي المقابلة للفصل الشمسي الأربعة والعشرين من كل عام.
// تواريخ التقويم الشمسي المقابلة للفصل الشمسي الأربعة والعشرين من كل عام تكاد تكون ثابتة وموزعة بالتساوي في الأشهر الاثني عشر.
// يناير فبراير مارس أبريل مايو يونيو
// البرد الصغير، البرد الكبير، بداية الربيع، المطر، الاعتدال الربيعي، تشينغمينغ، المطر الحبوبي، بداية الصيف، منشوريا الصغيرة، الانقلاب الصيفي
// يوليو، أغسطس، سبتمبر، أكتوبر، نوفمبر، ديسمبر
// صيف خفيف، حرارة شديدة، بداية الخريف، الصيف، الندى الأبيض، الاعتدال الخريفي، الندى البارد، الصقيع، بداية الشتاء، ثلوج خفيفة، ثلوج كثيفة، الانقلاب الشتوي
{****************************************************** ***** ********************************
لا توجد قواعد ثابتة للمصطلحات الشمسية، لذلك يجب علي حفظ الجداول لتوفير المساحة، لذلك...
*************************************************************************************************************************************************************************** *************************************}
// وصف تنسيق البيانات:
// على سبيل المثال، المصطلح الشمسي في عام 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;
يبدأ
com.caseiMonthof
1,3,5,7,8,10,12:النتيجة:=31;
4,6,9,11:النتيجة:=30;
2://إذا كانت سنة كبيسة
ifIsLeapYear(iYear)ثم
النتيجة:=29
آخر
النتيجة:=28
آخر
النتيجة:=0;
نهاية؛
نهاية؛
functionGetLeapMonth(iLunarYear:Word):Word;
فار
العلم: بايت؛
يبدأ
علامة:=gLunarMonth[(iLunarYear-START_YEAR)div2];
إذا (iLunarYear-START_YEAR)mod2=0ثم
النتيجة:=Flagshr4
آخر
النتيجة:=Flagand$0F;
نهاية؛
functionLunarMonthDays(iLunarYear,iLunarMonth:Word):Longword;
فار
الارتفاع، منخفض: كلمة؛
iBit:Integer;
يبدأ
ifiLunarYear<START_YEARثم
يبدأ
النتيجة:=30;
مخرج؛
نهاية؛
الارتفاع:=0;
منخفض:=29؛
iBit:=16-iLunarMonth;
إذا (iLunarMonth>GetLeapMonth(iLunarYear)) و(GetLeapMonth(iLunarYear)>0)ثم
Dec(iBit);
إذا (gLunarMonthDay[iLunarYear-START_YEAR]and(1shliBit))>0ثم
شركة (منخفض)؛
ifiLunarMonth=GetLeapMonth(iLunarYear)then
إذا (gLunarMonthDay[iLunarYear-START_YEAR]و(1shl(iBit-1)))>0ثم
الارتفاع:=30
آخر
الارتفاع: = 29؛
النتيجة:=MakeLong(Low,Height);
نهاية؛
functionLunarYearDays(iLunarYear:Word):Word;
فار
أيام،ط:كلمة؛
تمب: كلمة طويلة؛
يبدأ
الأيام:=0;
fori:=1to12do
يبدأ
tmp:=LunarMonthDays(iLunarYear,i);
Days:=Days+HiWord(tmp);
الأيام:=Days+LoWord(tmp);
نهاية؛
النتيجة:=أيام؛
نهاية؛
الإجراءFormatLunarYear(iYear:Word;varpBuffer:string);
فار
szText1,szText2,szText3:string;
يبدأ
szText1:='A, B, C, D, Wu, Ji, Geng, Xin, Rengui';
szText2:='لم يتقدم Zichou Yinmaochen Siwu بطلب للحصول على Youxuhai';
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+'year';
نهاية؛
functionFormatLunarYear(iYear:Word):string;
فار
pBuffer:string;
يبدأ
FormatLunarYear(iYear,pBuffer);
النتيجة:=pBuffer;
نهاية؛
الإجراءFormatMonth(iMonth:Word;varpBuffer:string;bLunar:Boolean);
فار
szText:string;
يبدأ
إذا (notbLunar) و(iMonth=1)ثم
يبدأ
pBuffer:='يناير';
مخرج؛
نهاية؛
szText:='إيجابي اثنين، ثلاثة، أربعة، خمسة، ستة، سبعة، ثمانية، تسعين';
ifiMonth<=10ثم
يبدأ
pBuffer:='';
pBuffer:=pBuffer+Copy(szText,(iMonth-1)*2+1,2);
pBuffer:=pBuffer+'month';
مخرج؛
نهاية؛
ifiMonth=11then
pBuffer:='أحد عشر'
آخر
pBuffer:='twelve';
pBuffer:=pBuffer+'month';
نهاية؛
functionFormatMonth(iMonth:Word;bLunar:Boolean):string;
فار
pBuffer:string;
يبدأ
FormatMonth(iMonth,pBuffer,bLunar);
النتيجة:=pBuffer;
نهاية؛
الإجراءFormatLunarDay(iDay:Word;varpBuffer:string);
فار
szText1,szText2:string;
يبدأ
szText1:='اليوم الثالث والعشرون من الشهر القمري';
szText2:='واحد اثنان ثلاثة أربعة خمسة ستة سبعة ثمانية وتسعون';
إذا (iDay<>20) و(iDay<>30)ثم
يبدأ
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):string;
فار
pBuffer:string;
يبدأ
FormatLunarDay(iDay,pBuffer);
النتيجة:=pBuffer;
نهاية؛
functionCalcDateDiff(iEndYear,iEndMonth,iEndDay:Word;iStartYear:Word;iStartMonth:Word;iStartDay:Word):Longword;
يبدأ
النتيجة:=Trunc(EncodeDate(iEndYear,iEndMonth,iEndDay)-EncodeDate(iStartYear,iStartMonth,iStartDay));
نهاية؛
functionCalcDateDiff(EndDate,StartDate:TDateTime):Longword;
يبدأ
النتيجة:=Trunc(EndDate-StartDate);
نهاية؛
الإجراء_CalcLunarDate(variYear,iMonth,iDay:Word;iSpanDays:Longword);
فار
تمب: كلمة طويلة؛
يبدأ
// 19 فبراير 1901 في التقويم الشمسي هو اليوم الأول من الشهر القمري الأول لعام 1901 في التقويم القمري
// هناك 49 يومًا في التقويم الغريغوري من 1 يناير إلى 19 فبراير 1901
ifiSpanDays<49ثم
يبدأ
iYear:=START_YEAR-1;
ifiSpanDays<19ثم
يبدأ
iMonth:=11;
iDay:=11+Word(iSpanDays);
نهاية
آخر
يبدأ
iMonth:=12;
iDay:=Word(iSpanDays)-18;
نهاية؛
مخرج؛
نهاية؛
// تبدأ الحسابات التالية من اليوم الأول للشهر القمري الأول لعام 1901
iSpanDays:=iSpanDays-49;
iYear:=START_YEAR;
iMonth:=1;
iDay:=1;
// احسب السنة
tmp:=LunarYearDays(iYear);
whileiSpanDays>=tmpdo
يبدأ
iSpanDays:=iSpanDays-tmp;
شركة(آيير);
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;
نهاية؛
شركة (آي مونث)؛
tmp:=LoWord(LunarMonthDays(iYear,iMonth));
نهاية؛
// احسب اليوم
iDay:=iDay+Word(iSpanDays);
نهاية؛
functionl_GetLunarHolDay(iYear,iMonth,iDay:Word):Word;
فار
العلم: بايت؛
اليوم:كلمة؛
يبدأ
العلم:=gLunarHolDay[(iYear-START_YEAR)*12+iMonth-1];
ifiDay<15ثم
اليوم:=15-((Flagshr4)و$0f)
آخر
اليوم:=(العلم$0f)+15;
ifiDay=Daythen
ifiDay>15ثم
النتيجة:=(iMonth-1)*2+2
آخر
النتيجة:=(iMonth-1)*2+1
آخر
النتيجة:=0;
نهاية؛
functionGetLunarHolDay(InDate:TDateTime):string;
فار
أنا، iYear، iMonth، iDay:Word؛
يبدأ
DecodeDate(InDate,iYear,iMonth,iDay);
i:=l_GetLunarHolDay(iYear,iMonth,iDay);
حالة
1:النتيجة:='شياوهان';
2:النتيجة:='البرد الكبير';
3:النتيجة:='بداية الربيع';
4:النتيجة:='مطر';
5:Result:='جينجزهي';
6:النتيجة:='الاعتدال الربيعي';
7:النتيجة:='تشينغمينغ';
8:النتيجة:='غو يو';
9:النتيجة:='بداية الصيف';
10:Result:='شياومان';
11:النتيجة:='أنواع العون';
12:النتيجة:='الانقلاب الصيفي';
13:النتيجة:='حرارة قليلة';
14:النتيجة:='حرارة عظيمة';
15:Result:='بداية الخريف';
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));
نهاية؛
نهاية.