delphi 根据年份获取年干支  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi 根据年份获取年干支


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.


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.041680097579956 seconds