unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
ComboBox1: TComboBox;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
{
公元后----------------------------------------------------------------------------------------
年干支推算:
天干序数按:1(甲),2(乙),3(丙),4(丁),5(戊),6(己),7(庚),8(辛),9(壬),10(癸)
地支序数按:1(寅),2(卯),3(辰),4(巳),5(午),6(未),7(申),8(酉),9(戌),10(亥),11(子),12(丑)
年干支推算:
①年干公式:年干=年份个位数- 3(适用于任何西元年,个位数小于3,借10)
②年支公式:年支=(年份+7)÷12余数(整除余0,即余12=丑)
③年支简化:
(西元年末二位数-1)-12*N=年支(适用于20世纪,即1900—1999年)
(西元年末二位数+3)-12*N=年支(适用于21世纪,即2000—2099年)
例:求2015年干支?
解:2015年干=5-3=2,2=乙,故2015年天干为乙
2015年支=15+3-12=18-12=6,6=未,故2015年地支为未
综上,2015年干支为乙未
例:求公元189年干支?
解:189年干=9-3=6=己,189年支=(189+7)/12余4=巳,189年干支为己巳
月干支推算:
①月干公式:月干=年干x2+月支(和超过10,直接取个位数)
②简化公式:(和取个位)
亥月干=年干x2
子月干=年干x2+1=寅月干
丑月干=年干x2+2=卯月干
例:已知2015年为乙未年,求2015年申月天干?
解:2015年乙未年,天干为乙,乙=2,申=7
申月干=乙x2+申=2*2+7=11,个位=1,1=甲,故申月天干为甲
例:求2012年壬辰年,亥月天干?
解:亥月干=壬x2+亥=9*2+10=18+10=28,个位=8,8=辛,故2012年壬辰年亥月天干为辛
(注:亥月天干公式,可直接简化为:亥月干=年干x2)
例:求戊子年,子月天干?
解:子月干=戊x2+子=5*2+11=21,个位=1=甲,故戊子年子月天干为甲
}
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := 2050 downto 1900 do
begin
combobox1.Items.Add(IntToStr(i));
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x, y: integer;
ng, nz: string;
//年干=年份个位数- 3(适用于任何西元年,个位数小于3,借10)
begin
x := StrToInt(copy(combobox1.Text, 4, 1));
if x < 3 then
begin
x := x - 3 + 10;
end
else
begin
x := x - 3;
end;
case x of
1:
ng := '甲';
2:
ng := '乙';
3:
ng := '丙';
4:
ng := '丁';
5:
ng := '戊';
6:
ng := '己';
7:
ng := '庚';
8:
ng := '辛';
9:
ng := '壬';
10:
ng := '癸';
end;
//年支=(年份+7)÷12余数(整除余0,即余12=丑)
y := (StrToInt(combobox1.Text) + 7) mod 12;
case y of
1:
nz := '寅';
2:
nz := '卯';
3:
nz := '辰';
4:
nz := '巳';
5:
nz := '午';
6:
nz := '未';
7:
nz := '申';
8:
nz := '酉';
9:
nz := '戌';
10:
nz := '亥';
11:
nz := '子';
0:
nz := '丑';
end;
label1.caption:=ng+nz;
//1(寅),2(卯),3(辰),4(巳),5(午),6(未),7(申),8(酉),9(戌),10(亥),11(子),12(丑)
end;
end.