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世纪,即19001999年)
(西元年末二位数+3)-12*N=年支(适用于21世纪,即20002099年)
例:求2015年干支?
解:2015年干=5-3=22=乙,故2015年天干为乙
2015年支=15+3-12=18-12=66=未,故2015年地支为未
综上,2015年干支为乙未
例:求公元189年干支?
解:189年干=9-3=6=己,189年支=(189+7)/124=巳,189年干支为己巳
月干支推算:
①月干公式:月干=年干x2+月支(和超过10,直接取个位数)
②简化公式:(和取个位)
亥月干=年干x2
子月干=年干x2+1=寅月干
丑月干=年干x2+2=卯月干
例:已知2015年为乙未年,求2015年申月天干?
解:2015年乙未年,天干为乙,乙=2,申=7
申月干=乙x2+申=2*2+7=11,个位=11=甲,故申月天干为甲
例:求2012年壬辰年,亥月天干?
解:亥月干=壬x2+亥=9*2+10=18+10=28,个位=88=辛,故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.

相关阅读 >>

Delphi 读url下txt中的下载地址的简单下载者代码

Delphi 根据进程名称获取进程号

Delphi 四舍五入取整函数

Delphi real控件 rm格式的播放器

Delphi编程之win10桌面图标设置

Delphi 控制鼠标按坐标点击

Delphi中的sender:tobject对象解析

Delphi xe2创建apple ios程序

Delphi实现qq右下角弹出信息窗口

Delphi 得到不同平台的录音文件保存路径

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...