GARANTIR DESCONTO

Fórum Datas no Delphi #312544

10/02/2006

0

Bom dia pessoal,


Alguem me sabe diz como obter atraves nº da semana e o ano, qual a data respectiva(intrevalo). Se existe algum comando que devolva esses valores.

Tipo nº semana 2 do ano 2005: corresponde 3-1-2005 a 9-1-2005.


Tou trab com Delphi 5.


Agradecia a ajuda


Nilpedro

Nilpedro

Responder

Posts

10/02/2006

Marco Salles

Tipo nº semana 2 do ano 2005: corresponde 3-1-2005 a 9-1-2005.


e a primeira semana do ano 2005 ??? corresponde a que ????


Responder

Gostei + 0

10/02/2006

Marco Salles

E mais

e a sexta semana do ano 2005 ??? corresponde a que ????



Responder

Gostei + 0

10/02/2006

Marco Salles

procedure calcularDatas(n,ano:Word);
var
Datainicial,DataFinal:TDate;
resto,fator,diferencaDias:word;
 begin
try
   dataInicial:=encodedate(ano,1,1);
   resto:=trunc(datainicial) mod 7;
   fator:=2;

   case resto of
   0:begin
     diferencaDias:=1;
     end;
   1:begin
     fator:=1;
     diferencaDias:=0;
     end;
   2:begin
     diferencaDias:=6;
     end;
   3:begin
     diferencaDias:=5;
     end;
   4:begin
     diferencaDias:=4;
     end;
   5:begin
     diferencaDias:=3;
     end;
   6:begin
     diferencaDias:=2;
     end;
   end;
   if n > 1 then
     begin
        dataInicial:=DataInicial+((n-fator)*7+diferencaDias);
        datafinal:=dataInicial+6;
     end
   else
     if resto=1 then
        dataFinal:=Datainicial+6
     else
       datafinal:=(dataInicial+diferencaDias-1);
   showmessage(´A Data Inicial é : ´+datetostr(dataInicial)+´ .´+#13+
               ´A Data Final é : ´+datetostr(dataFinal));
except
on econverterror do
  showmessage(´Erro na conversão de datas . Verifique Ano e Semanas´)
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  calcularDatas(strtoint(edit1.text),strtoint(edit2.text));
end;



Responder

Gostei + 0

10/02/2006

Nilpedro

Bigadao pela ajuda, mas ainda nao tive tempo de testar para ver se funciona.


Mas ja tinha encontrado uma solução, aqui fica a minha técnica:
[u:aa44c38533]usei SpinEdit e adicionei cDateTime no USES[/u:aa44c38533]



dta:=firstdayofyear(StrToDate(formatdatetime(´mm/dd/´+bsSkinSpinEdit2.Text,date)))
if isweekend(dta) then dta:=nextworkday(dta);
while not ismonday(dta) do
dta:=dta-1;
inicio.Caption := DateToStr(dta+(bsSkinSpinEdit1.Value -1)*7);
dta:=dta+(bsSkinSpinEdit1.Value -1)*7;
while not issunday(dta) do
dta:=dta+1;
fim.Caption := DateToStr(dta);


Responder

Gostei + 0

11/02/2006

Marco Salles

beleza que voce tenha encontrado a solução

mas voce disse que usa delphi 5.0 mas acho que esta unit cDateTime não faz parte do delphi 5.0 .. engraçado.. O SpinEdit tb não consegui localizar

[b:995066ce74]Tou trab com Delphi 5[/b:995066ce74].


em termos de codigo que lhe passei pode ser minimizado a veras


dataInicial:=encodedate(ano,1,1); resto:=trunc(datainicial) mod 7; fator:=2; case resto of 0:diferencaDias:=1; 1:begin fator:=1; diferencaDias:=0; end; 2:diferencaDias:=6; 3:diferencaDias:=5; 4:diferencaDias:=4; 5:diferencaDias:=3; 6: diferencaDias:=2; end; if n > 1 then begin dataInicial:=DataInicial+((n-fator)*7+diferencaDias); datafinal:=dataInicial+6; end else if resto=1 then dataFinal:=Datainicial+6 else datafinal:=(dataInicial+diferencaDias-1); showmessage(´A Data Inicial é : ´+datetostr(dataInicial)+´ .´+#13+ ´A Data Final é : ´+datetostr(dataFinal));


agora quanto a funcionar ou não , vai depender de como voce definiu o que voce quer como intervalo de data ???

Tipo nº semana 2 do ano 2005: corresponde 3-1-2005 a 9-1-2005


e a primeira semana do ano 2005 ??? corresponde a que ????


e a sexta semana do ano 2005 ??? corresponde a que ????


são definiçoes que ficaram soltas no ar ...o que faz com que o algoritimo atenda ou não


Responder

Gostei + 0

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

Aceitar