Fórum Acrescentar 100 anos na data #342271
23/05/2007
0
Aflsilva
Curtir tópico
+ 0Posts
23/05/2007
Massuda
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
Gostei + 0
23/05/2007
Aflsilva
Gostei + 0
23/05/2007
Moura
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.
Gostei + 0
23/05/2007
Aflsilva
Gostei + 0
24/05/2007
Moura
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í!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)