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