Predes Postado Março 23, 2009 Denunciar Share Postado Março 23, 2009 Bom dia, possuo uma função para converter data gregoriana para juliana q é a seguinte:function Data_Juliana(Data_Atual: TDateTime): String;var Ano, Mes, Dia: Word;Data_Final, Data_Inicial: String;Resultado: Real;begin DecodeDate (Date, Ano, Mes, Dia); Data_Final := DateToStr (Data_Atual); Data_Inicial := '31/12/' + IntToStr (Ano - 1); Resultado := StrToDate (Data_Final) - StrToDate (Data_Inicial); Result := FloatToStr (Resultado);end;A dúvida é: como faço o contrario? de juliana para gregoriana? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 23, 2009 Denunciar Share Postado Março 23, 2009 A dúvida é: como faço o contrario? de juliana para gregoriana?Autor: Club Developers - Web del autor: www.clubdevelopers.com El domingo de Pascua corresponde al primer domingo que sigue a la primera luna llena de primavera. La función aquí expuesta calcula el día de Pascua para fechas entre 1583 y 4099. function Pascua(Ano : Integer): TDateTime; var Y,G,C,X,Z,D,E,N,P,J,M: Integer; begin { Algoritmo válido para fechas entre 1583 y 4099} Y := Ano; G := (Y mod 19) + 1; C := Trunc((Y/100)) + 1; X := Trunc(3 * C / 4) - 12; Z := Trunc(((8 * C) + 5) / 25) - 5; D := Trunc(((5 * Y) / 4) - X - 10); E := ((11 * G)+ 20 + Z - X) mod 30; if ((E = 25) and (G > 11)) or (E = 24) then E := E + 1; N := 44 - E; if N <; 21 then N := N + 30; P := N + 7 - ((D + N) mod 7); if P > 31 then J := P - 31 else J := P; if J = P then M := 3 else M := 4; Result := EncodeDate(Ano, M, J); end; Convertir una fecha gregoriana a juliana 01/01/2006 Top Autor: Club Developers - Web del autor: www.clubdevelopers.com Para convertir una fecha de formato gregoriano a juliano, simplemente tenemos que hacer una llamada a la función DateTimeToJulianDate() definida en DateUtils. uses DateUtils; var DiaJuliano: Extended; DateC: TDateTime; Ano, Mes, Dia: Word; Hora, Minuto, Segundo: Word; begin DateC := EncodeDateTime(Ano, Mes, Dia, Hora, Minuto, segundo, 0); DiaJuliano := DateTimeToJulianDate(DateC); end; Atención: para que el resultado de la función DateTimeToJulianDate(date) de Delphi devuelva un valor correcto, es necesario que la fecha sea estrictamente más grande al 15/10/1582 00:00:00 (inicio del calendario gregoriano). Antes de esta fecha falta el desfase de 10 dias entre los dos calendarios. Para las fechas estrictamente inferiores al 5 de octubre 1582, simplemente hay que anãoadir 10 al resultado de la función de Delphi. Donde no se puede calcular los días julianos es entre las fechas del 5 al 14 de octubre 1582 debido a que éstas no existen. Convertir una fecha juliana a gregoriana 01/01/2006 Top Autor: Club Developers - Web del autor: www.clubdevelopers.com Para convertir una fecha de formato juliano a formato gregoriano simplemente tenemos que hacer uso de la función JulianDateToDateTime() definida en DateUtils. uses DateUtils; var DiaJuliano: Extended; DateC: TDateTime; begin DateC := JulianDateToDateTime(DiaJuliano); end; Saber los días de paso de horario de invierno a horario de verano 01/01/2006 Top Autor: Club Developers - Web del autor: www.clubdevelopers.com El paso de la hora de verano a la hora de invierno está fijado por ley hasta el 2006. El paso a la hora de verano se realiza el último domingo del mes de marzo y el paso a la hora de invierno el último domingo del mes de octubre. Saber si un anãoo es bisiesto 01/01/2006 Top Autor: Club Developers - Web del autor: www.clubdevelopers.com Para que un anãoo sea bisiesto es necesario que sea múltiplo de 4 sin ser un múltiplo de 100 a excepción de si es múltiplo de 400. Los anãoos 1700, 1800 y 1900 no son bisiestos mientras que 2000 sí lo es. Para este menester, Delphi nos ofrece la función IsInLeapYear declarada en la unit DateUtils. uses DateUtils; var MiDate: TDate; begin MiDate := EncodeDate(2004,12,35); if IsInLeapYear(MiDate) then ShowMessage('Anãoo bisiesto') else ShowMessage('No es anãoo bisiesto'); end;abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Predes Postado Março 24, 2009 Autor Denunciar Share Postado Março 24, 2009 Eu ande vendo sobre esse DateUtils e ao que parece ele pertence ao delphi 6, aqui estou utilizando o 5 tem algo parecido para delphi 5?eu estava tentando fazer da segunite maneira: DecodeDate (Date, Ano, Mes, Dia); dataj:=(editjulian.text); //(recebe o valor Juliano inserido pelo usuário) datafinal:='31/12/' + IntToStr (Ano - 1); Resultado:=StrToDate(datafinal)+ StrToDate(dataj); ----> to com problema na hora de somar esses 2 valores Result:=FloatToStr(resultado); meconvert.text:=result;Meu problema é na hora da soma dos valores porque o valor juliano não é uma data valida para ser um Date e a Data não é um valor valido pra integerse conseguisse somar esses valores devolvendo uma data ##/##/## já resolveria!Mais vlw pela atenção! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 24, 2009 Denunciar Share Postado Março 24, 2009 Eu ande vendo sobre esse DateUtils e ao que parece ele pertence ao delphi 6, aqui estou utilizando o 5 tem algo parecido para delphi 5?Predes ... fiz este código para o delphi 5, creio que vai ajudar a voce e a outros CONVERTER DATA GREGORIANA PARA JULIANA E VICE VERSAunit 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.abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Predes Postado Março 24, 2009 Autor Denunciar Share Postado Março 24, 2009 Caro Jhonas novamente agradeço pela atenção, seu código foi de grande ajuda em meu projeto, e referente ao erro no código que estava utilizando corrigi só pra constar hehehe...quem tiver algo parecido não é completo como o do amigo Jhonas porém ta ai!varAno, Mes, Dia: Word;datafinal:string;data:tdate;dataj:integer; dataj:=StrToInt(edit1.text); datafinal:='31/12/'+IntToStr(Ano-1); data:=StrToDate(datafinal); MaskEdit1.text:=DateTostr(data+dataj); Edit1.text:='';Abraço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 24, 2009 Denunciar Share Postado Março 24, 2009 quem tiver algo parecido não é completo como o do amigo Jhonas porém ta ai!Predes ... acho que voce deve rever este código, porque não é tão simples o calculoVeja: se voce digitar esta data em juliano 2454831,50 voce teria que obter como resposta 31/12/2008entretanto o seu código esta retornando 06/02/8730 Caso voce queira fazer uma prova, use este site para fazer um teste de datas http://www.csgnetwork.com/juliangregcalconv.htmlabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Predes Postado Março 24, 2009 Autor Denunciar Share Postado Março 24, 2009 (editado) Verdade por isso acabei utilizando seu codigo que é muito mais complexo e exato, mais acho q pra o que eu iria usar só receberia como data juliana de 1 a 365 talvez não tivesse problema onde o dia 31/12/08 equivale ao dia '00' , não sei, porem é melhor não arriscar até porque é meu primeiro projeto delphi e sql prefiro confiar em vocês que tem mtoo mais experiencia! Editado Março 24, 2009 por Predes Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Março 24, 2009 Denunciar Share Postado Março 24, 2009 Esqueci de colocar outra maneira de visualizar o resultado para mostrar o mes em texto Label2.Caption := ('Data Gregoriana : ' + inttostr(trunc(DiaGreg)) + ' / ' + MesGregText + ' / ' + inttostr(trunc(AnoGreg)));OBS: o dia juliano 0 correponde a 01/01/4712 A.C. Se é um trabalho de escola, cuidado com as perguntas do professor ...rs abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Predes Postado Março 25, 2009 Autor Denunciar Share Postado Março 25, 2009 ahaha ta OK...Abraço! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Predes
Bom dia, possuo uma função para converter data gregoriana para juliana q é a seguinte:
function Data_Juliana(Data_Atual: TDateTime): String;
var Ano, Mes, Dia: Word;
Data_Final, Data_Inicial: String;
Resultado: Real;
begin
DecodeDate (Date, Ano, Mes, Dia);
Data_Final := DateToStr (Data_Atual);
Data_Inicial := '31/12/' + IntToStr (Ano - 1);
Resultado := StrToDate (Data_Final) - StrToDate (Data_Inicial);
Result := FloatToStr (Resultado);
end;
A dúvida é: como faço o contrario? de juliana para gregoriana?
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
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.