GARANTIR DESCONTO

Fórum Acrescentar 100 anos na data #342271

23/05/2007

0

Amigos, estou importando os dados de uma tabela .dbf de um sistema antigo (feito em clipper). Acontece que quando estou importando datas, como o ano é com 2 dígitos, no momento da importação, quando vai gravar no firebird, a data, por exemplo: 23/05/07, ao invés de gravar 23/05/2007, fica 23/05/1907. Gostaria de saber como eu faço para gravar 2007. Se não tiver como, como eu acrescento + 100 anos na data para ficar correto?


Aflsilva

Aflsilva

Responder

Posts

23/05/2007

Massuda

Normalmente o que se faz neste caso é escolher um ano qualquer como sendo o ´pivô´. Valores acima do pivô são do século passado, valores abaixo do pivô são deste século.

Por exemplo, escolhendo 1980 como sendo o pivô, você teria...

01/01/80 = 01/01/1980
...
01/01/99 = 01/01/1999
01/01/00 = 01/01/2000
...
01/01/79 = 01/01/2079

...o código é algo assim...
// assume que 0 <= Ano <= 99
if Ano < 80 then 
  Ano := Ano + 2000
else
  Ano := Ano + 1900



Responder

Gostei + 0

23/05/2007

Aflsilva

Massuda, poderia me explicar melhor, porque não estou conseguindo fazer como você colocou. Como eu faço para colocar da maneira que você fez? Eu extraio apenas o ano da data e depois coloco de volta? como eu faço? :(


Responder

Gostei + 0

23/05/2007

Moura

aflsilva,
nesse caso a lógica é outra.

Tenho aplicações para micros e pequenas empresas, de vez em quando me deparo com o mesmo problema. Importar dados de antigos sistema em clipper ( :D saudades!).

[b:e545b1538b][LÓGICA DO CLIPPER][/b:e545b1538b]
([i:e545b1538b]não sei vc se chegou a programar em Clipper[/i:e545b1538b])
O Clipper interpretava DATAS usando apenas 8 digitos. Para 10 digitos o programador tinha de formatar isso na unha como nos comando abaixo,
(tipo ONCREATE do formulário principal de nossa aplicação em Delphi)

Lembre-se desses comandos do Clipper:
- SET CENTURY ON // Interpretar Século Presente
- SET DATE TO BRITISH // Converter data para o formato europeu que tambem é a nossa forma de tratar datas.
- SET DATE FORMAT TO ´DD/MM/YYYY´

Quanto ao ´SET CENTURY ON´ (formatava o sistema para levar em conta o século presente) de acordo com a data do computador.
Esse comando intepretava automaticamente anos de 2 digitos.
Exemplo: se a data do computador estivesse ne seculo x900 (1900 até 1999) e o usuario informasse 23/05/07, então automaticamente o sistema convertia para 23/05/1907.

Como mudamos de século estamos em 2000..., se o usuario informasse 23/05/07, então automaticamente o sistema convertia para 23/05/2007.

Quando chegar a 2100 começa como no exemplo de 1900 e assim por diante.

[b:e545b1538b][TEMPOS ATUAIS][/b:e545b1538b]
Infelizmene se o programador CLIPPER não tomou esses cuidados você terá de resolver isso manualmente.
Primeiro você deve utilizar alguma ferramenta (DBU ou Database Desktop) para se certificar que a coluna esteja no formado DATE.
Então você terá de decodificar e extrair ´dia´, ´mes´ e ´ano´ com o comando [i:e545b1538b][b:e545b1538b]DecodeDate[/b:e545b1538b][/i:e545b1538b] do Delphi.

Eu tenho uma função que uso para tratar datas. espero que te dê uma LUZ:
Importe os dados e deixe com data 19...

[color=green:e545b1538b]
Function Dia(vData:TDate):Integer;
Function Mes(vData:TDate): Integer;
Function Ano(vData:TDate):Integer;

(...)

// Retorna o Dia de uma data
Function Dia(vData:TDate):Integer;
Begin
     DecodeDate(vData,Year,Month,Day);
     Result:=Day;
end;

// Retorna o Mes de uma data
Function Mes(vData:TDate):Integer;
  Var
  wDia, wMes, wAno : Word;
Begin
     DecodeDate(vData,Year,Month,Day);
     Result:=Month;
end;

// Retorna o Ano de uma data
Function Ano(vData:TDate):Integer;
Begin
     DecodeDate(vData,Year,Month,Day);
     Result:=Year;
end;

[/color:e545b1538b]

Utilize assim:

[color=green:e545b1538b]
(...)

Var
   NovaData : Date;
   xAno : Integer;
Begin

   Tabela.First;
   While not Tabela.eof do
   begin
      NovaData :=´´;
      xAno :=0;
      xAno :=ANO(Tabela.FieldByName(´DATA´).AsDateTime);
   
      // aflsilva, trate aqui ANO (acho que aqui entra aquela sua ideia de acrescentar 100 no ano )
      If xAno<2000 then
         xAno := xAno + 100;

      NovaData := IntToStr(  DIA(Tabela.FieldByName(´DATA´).AsDateTime)  )
                  +´/´+
                  IntToStr( MES(Tabela.FieldByName(´DATA´).AsDateTime)  )
                  +´/´+
                  IntToStr( xAno  );
      Tabela.Edit;
      Tabela.FieldByName(´DATA´).AsDateTime :=StrToDate(NovaData);
      Tabela.Post;
      Tabela.Next; // passar para o proximo registro
   end;

End;


[/color:e545b1538b]

Espero que possa te ajudar.

 


Responder

Gostei + 0

23/05/2007

Aflsilva

Moura, muito obrigado pela ajuda. Funcionou do jeito que eu queria. Agradeço demais a ajuda! :D .Só para completar, eu começei a programar com clipper (não sei se é o seu caso). Agora só trabalho com delphi. Obrigado pela ajuda! :wink:


Responder

Gostei + 0

24/05/2007

Moura

Só para completar, eu começei a programar com clipper (não sei se é o seu caso). Agora só trabalho com delphi. Obrigado pela ajuda! :wink:


A primeira linguagem que aprendi foi BASIC, depois ASSEMBLER, depois MS-QUICK BASIC e para fins comerciais comecei com o ´Clipper 5.0´.

O importante é que a ajuda deu certo... qualquer coisa estamos aí!!!

 


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar