Divisão de Datas

Delphi

31/05/2004

Galera se puderem me ajudar.

Eu preciso dividir uma data em dia, mês e Ano, pra podere fazer um form trabalhar com uma troca de data (01/12/2004) para Dia (01), Mes e Ano (12/2004) e vice-versa. :lol:


Zunker

Zunker

Curtidas 0

Respostas

Lucas Silva

Lucas Silva

31/05/2004

Usa o comando [b:1b5a5ee6f1]decodeDate[/b:1b5a5ee6f1]


GOSTEI 0
Jrjoliv2003

Jrjoliv2003

31/05/2004

Vc está querendo desmembrar a data?

Se for isso utilize o comando copy. Ele copia partes de uma string.
Por exemplo:
se vc digitou 31/05/2004 em um edit, para ter cada parte faça:

dia:=StrToInt(Copy(edit1.text,1,2)); copia os 2 primeiros dígitos;
mes:=StrToInt(Copy(edit1.text,4,2)); copia o 3º e 4º dígitos;
ano:=StrToInt(Copy(edit1.text,6,4)); copia o 6º, 7º, 8º e 9º dígitos;

como os valores são inteiros vc pode incrementar decrementar etc.

espero ter ajudado!!!!


GOSTEI 0
Pedro Bugim

Pedro Bugim

31/05/2004

Colega,
vc terá q usar a funão copy, para retirar pedaços da data.
Primeiro crie 3 variáveis, onde alocará os devidos pedaços. Vou considerar como se a data estivesse em um edit chamado EdtData e que a mesma seja 20/11/1998, ok?!
Lá vai um exemplo:
Var
   dia, mes, ano : String;
Begin
   Dia := Copy(EdtData.text, 1, 2);
   Mes := Copy(EdtData.text, 4, 2);
   Ano := Copy(EdtData.text, 7, 4);
end;

Desta forma, as variáveis tomarão como valor as strings ´20´, ´11´ e ´1998´ respectivamente.
Repare que o copy trabalha da seguinte forma: indica-se como parâmetro, o edit a ser trabalhado, a posião do primeiro caracter a ser copiado e finalmente, a quantidade de caracteres que serão copiados. Ok?!
Espero ter ajudado!
Abraços,
Pedro Bugim


GOSTEI 0
Lucas Silva

Lucas Silva

31/05/2004

procedure TForm1.Button1Click(Sender: TObject);
var ano, mes, dia: word;
begin
   DecodeDate(StrToDate(Edit1.Text),ano,mes,dia);
end;



GOSTEI 0
Zunker

Zunker

31/05/2004

vlw pessoal


GOSTEI 0
Ilanocf

Ilanocf

31/05/2004

Veja se isso pode ajudá-lo:

[b:192e7bc67b]Idade[/b:192e7bc67b] // Programador - Paulo Alexsandro Freitas de Miranda <- The Programmer -> // dprogrammer@ieg.com.br unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Mask; type TForm1 = class(TForm) meNasc: TMaskEdit; Label1: TLabel; SpeedButton1: TSpeedButton; edIdade: TEdit; Label2: TLabel; BitBtn1: TBitBtn; Label3: TLabel; edDias: TEdit; function Bissexto(AYear: Integer): Boolean; function DiasDoMes(AYear, AMonth: Integer): Integer; function Idade2(DataNasc : TDate) : String; function Dias(Data : TDate) : String; function Idade(Nasc : TDate) : String; procedure SpeedButton1Click(Sender: TObject); procedure meNascKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function TForm1.Bissexto(AYear: Integer): Boolean; begin Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0)); end; function TForm1.DiasDoMes(AYear, AMonth: Integer): Integer; const DaysInMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); begin Result := DaysInMonth[AMonth]; if (AMonth = 2) and Bissexto(AYear) then Inc(Result); end; function TForm1.Idade2(DataNasc : TDate) : String; Var Ano1, Mes1, Dia1 : Word; Ano2, Mes2, Dia2 : Word; Ano, Mes, Dia : Word; Idade : String; AuxDia1, AuxDia2 : Integer; begin Idade := ´´; DecodeDate(DataNasc, Ano1, Mes1, Dia1); DecodeDate(Date, Ano2, Mes2, Dia2); AuxDia1 := Dia1; AuxDia2 := Dia2; if (Dia1 > Dia2) And ((Mes2 - Mes1) = 1) then begin Dia2 := Dia2 + DiasDoMes(Ano1, Mes1); Mes1 := Mes2; end else if (Dia1 > Dia2) And (Mes1 <> Mes2) then begin Dia2 := Dia2 + DiasDoMes(Ano1, Mes1); end else if (Mes1 = Mes2) And (Dia1 > Dia2) And (Ano1 <> Ano2) then begin Dia2 := Dia2 + DiasDoMes(Ano1, Mes1); Mes2 := Mes2 + 11; Ano1 := Ano1 + 1; end; if (Mes1 > Mes2) And (AuxDia1 <= AuxDia2) then begin Ano1 := Ano1 + 1; Mes2 := Mes2 + 12; end else if (Mes1 > Mes2) And (AuxDia1 > AuxDia2) then begin Ano1 := Ano1 + 1; Mes2 := Mes2 + 11; end; Ano := Ano2 - Ano1; Mes := Mes2 - Mes1; Dia := Dia2 - Dia1; if Ano > 1 then Idade := IntToStr(Ano) + ´ Anos´ else if Ano = 1 then Idade := IntToStr(Ano) + ´ Ano´; if Mes > 1 then Idade := Idade + ´, ´ + IntToStr(Mes) + ´ Meses ´ else if Mes <> 0 then Idade := Idade + ´, ´ + IntToStr(Mes) + ´ Mês ´; If Ano = 0 then Delete(Idade, 1, 1); if Dia > 1 then Idade := Idade + ´ e ´ + IntToStr(Dia) + ´ Dias´ else if Dia <> 0 then Idade := Idade + ´ e ´ + IntToStr(Dia) + ´ Dia´; if (Mes = 0) And (Ano = 0) then Delete(Idade, 1, 3); if (Ano1 = Ano2) And (Mes1 = Mes2) And (Dia1 > Dia2) then Idade := ´0´; Result := Idade; end; function TForm1.Dias(Data : TDate) : String; begin Result := FloatToStr(Date - Data); end; function TForm1.Idade(Nasc : TDate) : String; Var AuxIdade, Meses, IdadeReal : String; MesesFloat : Real; IdadeInc : Integer; begin AuxIdade := Format(´¬0.2f´, [(Date - Nasc) / 365.6]); Meses := FloatToStr(Frac(StrToFloat(AuxIdade))); if AuxIdade = ´0´ then begin Result := ´0,0´; Exit; end; if Meses[1] = ´-´ then Meses := FloatToStr(StrToFloat(Meses) * -1); Delete(Meses, 1, 2); if Length(Meses) = 1 then Meses := Meses + ´0´; if (Meses <> ´0´) And (Meses <> ´´) then MesesFloat := Round(((365.6 * StrToInt(Meses)) / 100) / 30) else MesesFloat := 0; if MesesFloat <> 12 then IdadeReal := IntToStr(Trunc(StrToFloat(AuxIdade))) + ´,´ + FloatToStr(MesesFloat) else begin IdadeInc := Trunc(StrToFloat(AuxIdade)); Inc(IdadeInc); IdadeReal := IntToStr(IdadeInc) + ´,´ + ´0´; end; Result := IdadeReal; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin edDias.Text := Dias(StrToDate(meNasc.Text)); edIdade.Text := Idade2(StrToDate(meNasc.Text)); end; procedure TForm1.meNascKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 13 then begin SpeedButton1.Click; Key := 0; end; end; end.



GOSTEI 0
Zunker

Zunker

31/05/2004

E se depois eu quiser juntar tudo denovo numa data, como eu faço? :roll:


GOSTEI 0
Paulo_amorim

Paulo_amorim

31/05/2004

E se depois eu quiser juntar tudo denovo numa data, como eu faço? :roll:


Olá

Utilize o comando EncodeDate

procedure TForm1.Button1Click(Sender: TObject);
var ano, mes, dia: word;
begin
   DecodeDate(StrToDate(Edit1.Text),ano,mes,dia);
end;

Aproveitando o código que o Lucas passou, ficaria
MinhaData := EncodeDate(dia, mes, ano);



Até+


GOSTEI 0
Zunker

Zunker

31/05/2004

Como eu converto uma variavel [b:3aeb69372c]Word[/b:3aeb69372c] em String

E como eu coloco uma variavel para ser data.


GOSTEI 0
Paulo_amorim

Paulo_amorim

31/05/2004

Como eu converto uma variavel [b:9228dd0f35]Word[/b:9228dd0f35] em String E como eu coloco uma variavel para ser data.


Olá

-Converta com IntToStr

-Declare com o tipo TDateTime

var MinhaData: TDateTime;

pode-se utilizar TDate ou TTime separados, mas dá no mesmo....

Até+


GOSTEI 0
POSTAR