Ir para conteúdo
Fórum Script Brasil
  • 0

Converter data Juliana para Gregoriana e Vice Versa


Jhonas

Pergunta

Como não achei nada na internet para o delphi, resolvi montar este codigo para o pessoal:

Converter data Juliana para Gregoriana e vice versa

unit UJulianGreg;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Data : string;
  MesGreg, DiaGreg, AnoGreg : real;
implementation

{$R *.DFM}

Uses Math;

Procedure GtoJ(DiaGreg, MesGreg, AnoGreg : integer);
var A, B: integer; JulDate : real;
begin
   if (MesGreg <= 2) then
      begin
       MesGreg := MesGreg + 12;
       AnoGreg := AnoGreg - 1;
      end;

   A := Math.floor(AnoGreg/100);
   B := 2 - A + Math.floor(A/4);
   julDate := Math.floor(365.25*(AnoGreg+4716)) + Math.floor(30.6001*(MesGreg+1)) + DiaGreg + B - 1524.5;
   Data:= floattostr(julDate);
end;


Procedure JtoG(julDate : real);
var  Epsilon, omega , A, B, C, D, Z, f : real;
     MesGregText : string;
begin

  julDate := julDate + 0.5;
  z := Math.floor(julDate);
  f := julDate - z;
  if (z < 2299161) then
    A := z
  else
    omega := Math.floor((z-1867216.25)/36524.25);

  A := z + 1 + omega - Math.floor(omega/4);
  B := A + 1524;
  C := Math.floor((B-122.1)/365.25);
  D := Math.floor(365.25*C);
  Epsilon := Math.floor((B-D)/30.6001);
  DiaGreg := B - D - Math.floor(30.6001*Epsilon) + f;
  if (Epsilon < 14) then
     MesGreg := Epsilon - 1
  else
     MesGreg := Epsilon - 13;

  if (MesGreg > 2) then
     AnoGreg := C - 4716
  else
     AnoGreg := C - 4715;

  case trunc(MesGreg) of
   1  : MesGregText := 'Janeiro';
   2  : MesGregText := 'Fevereiro';
   3  : MesGregText := 'Março';
   4  : MesGregText := 'Abril';
   5  : MesGregText := 'Maio';
   6  : MesGregText := 'Junho';
   7  : MesGregText := 'Julho';
   8  : MesGregText := 'Agosto';
   9  : MesGregText := 'Setembro';
   10 : MesGregText := 'Outubro';
   11 : MesGregText := 'Novembro';
   12 : MesGregText := 'Dezembro';

  end;

end;
procedure TForm1.Button1Click(Sender: TObject);
var Year, Month, Day : Word;
begin
   // Data Gregoriana para Juliana
   // Dia , Mes , Ano
   Data:= InputBox('Data Gregoriana', 'Digite uma data', '00/00/0000');

   DecodeDate(strtodate(Data), Year, Month, Day);

   GtoJ(Day,Month,Year);
   Label1.caption := ('Data Juliana : ' + Data );
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   // Data Juliana para Gregoriana
   Data:= InputBox('Data Juliana', 'Digite uma data', '00000000,00');

   JtoG(strtofloat(Data));
   Label2.Caption := ('Data Gregoriana : ' + inttostr(trunc(DiaGreg)) + ' / ' + inttostr(trunc(MesGreg)) + ' / ' + inttostr(trunc(AnoGreg)));
end;

end.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652,1k
×
×
  • Criar Novo...