Originariamente inviato da vdario
Ciao ragazzi. Qualcuno mi sa dire come calcolare dinamicamente in delphi la data corrente in formato aaaammgg (es 20040413)e da quel valore sapere la data del venerdì precedente (sempre in quel formato, es 20040409)?
In passato ho avuto anche io la necessità di costruire una stringa che rappresentasse la data usando il formato AAAAMMGG; si è rivelata utile come nome di file che consente di ottenere, da Gestione Risorse, un ordinamento corretto e "pesato" dei file, dal più vecchio al più recente.
Ti posto una porzione di codice che puoi inserire all'interno di una funzione creata da te:
codice:
function DateToYYYYMMDD(const ADate: TDateTime): string;
var
Y, M, D: Word;
begin
DecodeDate(ADate, Y, M, D);
Result := Format('%.2d', [Y])
+ Format('%.2d', [M])
+ Format('%.2d', [D]);
end;
La data ADate viene "spezzettata" usando DecodeDate nelle sue componenti di giorno, mese e anno che vengono poi ricomposti nell'ordine desiderato all'interno di una stringa, facendo in modo che ciascuna componente abbia il numero di cifre desiderato (la cifra "0", zero, viene usata per il "padding").
Per calcolare la data risalente alla settimana precedente rispetto alla data passata come parametro, ti conviene lavorare unicamente sul valore espresso come TDateTime e non sulla forma in stringa già convertita.
Delphi ti mette a disposizione alcune funzioni interessanti, contenute nella unit DateUtils.pas, per eseguire i calcoli più comuni e non su date e ore.
Ad esempio, IncWeek ti permette di incrementare un valore data/ora (TDateTime) di una settimana; specificando un intervallo negativo, puoi "indietreggiare" di una settimana.
Se consulti la Guida in linea, troverai altre funzioni di questo tipo con le quali puoi costruire virtualmente qualsiasi algoritmo che ti interessa per risalire alla data/ora voluta.
Al termine dell'operazione, puoi convertire nuovamente il valore TDateTime in stringa usando la funzione che ti ho riportato sopra.
Prova a fare qualche esperimento, poi mi saprai dire.
Ciao!