EzLunar 是一個程式單元,此單元提供一組工具函式,讓你可以處理西曆和農曆日期的轉換。
農曆日期的相關資料結構如下:
type
TLunarDateRec = record
Year: Integer; // 年.
Month: Integer; // 月.
Day: Integer; // 日.
LeapMonth: Boolean; // 是否為閏月.
YearName: string[4]; // 農曆年干支.
MonthName: string[6]; // 農曆月名(正月,二月....).
DayName: string[4]; // 農曆日名(初一,初二....).
Horoscope: string[2]; // 生肖.
end;
注意事項:
由於西曆換算成農曆時沒有單一公式,必須以查表的方式轉換,因此目前的表格只建到民國 100 年,超過民國 100 年(西元 2011年)就無法進行轉換,但轉換表格可以自行擴充,原始碼中會說明如何自行擴充轉換表格。另外,民國元年二月十八日(1912/2/18)換算成農曆是元年正月初一,所以民國元年 2/18 以前的日期也無法轉成農曆。
本產品未提供試用版,您可以先下載範例程式的執行檔觀看轉換的結果。
下載範例程式的執行檔:LunarDemo.zip
以下範例程式碼取自 LunarDemo,您可以透過這些程式碼了解如何使用 EzLunar 單元來進行中西曆轉換:
uses EzLunar;
// 西曆轉農曆
procedure TForm1.btnToLunarClick(Sender: TObject);
var
LDate: TLunarDateRec;
begin
LDate := GregorianToLunarDate(DateTimePicker1.Date);
edLunarYear.Text := IntToStr(LDate.Year);
edLunarMonth.Text := IntToStr(LDate.Month);
edLunarDay.Text := IntToStr(LDate.Day);
lblYearName.Caption := LDate.YearName;
lblMonthName.Caption := LDate.MonthName;
if LDate.LeapMonth then
lblMonthName.Caption := '閏 ' + lblMonthName.Caption;
chkLeapMonth.Checked := LDate.LeapMonth;
lblDayName.Caption := LDate.DayName;
lblHoroscope.Caption := LDate.Horoscope;
end;
// 農曆轉西曆
procedure TForm1.btnToGregorianClick(Sender: TObject);
var
LDate: TLunarDateRec;
begin
LDate.Year := StrToInt(edLunarYear.Text);
LDate.Month := StrToInt(edLunarMonth.Text);
LDate.Day := StrToInt(edLunarDay.Text);
LDate.LeapMonth := chkLeapMonth.Checked;
DateTimePicker1.Date := LunarToGregorianDate(LDate);
end;
範例程式的執行畫面:
產品售價:300 元。
產品內含程式原始碼以及範例程式,並可享有技術支援服務。
Sep-20-2002