Newsgroup: it.comp.lang.delphi
Titolo: Lavorare con le date...

Ciao a tutti, vorrei sapere come si fa a trovare il n° di giorni (in 
Integer) passati da una determinata data alla data odierana. Cioè dovrei 
creare una funzione che mi restituisca il n° dei giorni trascorsi fino alla 
data odierna. Uso Delphi 6. Grazie anticipato per il suggerimento. 

Lorenzo ha scritto:

Puoi usare la funzione *DaysBetween*; la trovi nella unit 
/DateUtils.pas/ che, oltre a questa, contiene tantissime altre funzioni 
davvero utili per lavorare con le date.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

var D: Date;
    Dist: Integer;
begin
  D:=StrToDate('01/01/1980');
  Dist:=Trunc(Date-D);
end;
Oppure guarda in DateUtils se la versione di Delphi che hai ha qualche
funzione che possa aiutarti

"raktzo" <_ra...@users.sourceforge.net_> ha scritto nel messaggio 
news:434f8...@newsgate.x-privat.org...

GRAZIE MILLE A TUTTI!!! un saluto a tutto il news... 

 ha scritto nel messaggio
news:434f87ce$0$20501$4faf...@reader4.news.tin.it...
: Ciao a tutti, vorrei sapere come si fa a trovare il n° di giorni (in

Andrea

> Questa domanda è in un compito in classe ?
No assolutamente.. magari!!! devo rendere un programma trial per 15 day e 
non sapevo che esistesse la dateutils.pas. Ho imparato da solo ed a volte le 
cose più semplici non le so fare. Grazie a tutti comunque... 

 cose più semplici non le so fare. Grazie a tutti comunque...
Beh ma a questo punto non credo che la semplice dateutils ti potra' aiutare
a proteggere il tuo programmino... infatti basta riportare la data di
sistema al giorno prima della scadenza per poterlo usare, oppure craccarlo
con il datecrack (
http://www.geocities.com/raviworld2000/Datecrack.zip
).
(sai quanti programmilli shareware craccavo con datecrack ai tempi di
win95?? spettacolo... :-) )
Per rendere un tuo programma timebombing devi usare dei tools piu'
professionali e gratis, ad esempio tmxprotector
(
http://maxcomponents.net/components.html#PROTECTOR
) oppure la suite
estremamente completa OnGuard (
http://sourceforge.net/projects/tponguard/
)
Entrambe dotate di demo da compilare e analizzare per facilitarti il
lavoro.
Ciao
-- 
Morde. 
ICLDweb: 
http://www2.samatel.com/icld/
Apriamo i sorgenti di OS/2!!!
http://www.os2world.com/petition/

 davvero utili per lavorare con le date.
..e bacate ;-), come la MonthsBetween, che parte dalla fantastica
assunzione che un mese sia lungo 30.4375 giorni...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 assunzione che un mese sia lungo 30.4375 giorni...
Non sembra un bug, ma una cosa fatta volutamente, anche se mi sfuggono i 
motivi di una simile approssimazione (non ho tempo di addentrarmi nei 
meandri del ragionamento che ha portato a questa scelta). :-/


 meandri del ragionamento che ha portato a questa scelta). :-/
C'era un thread su delphiedintorni sul tema, non ricordo l'area e il
periodo.
I decimali sembra vengano fuori sommando i giorni di 4 anni (365*3+366 per
il bisestile) e poi dividendo per 48 (i mesi nei 4 anni).
Bye,
Raktzo

 Non sembra un bug, ma una cosa fatta volutamente [...]
Non vuol dire, è una cazzata comunque.
Quella funzione non assolve correttamente ai propri compiti...


raktzo ha scritto:

Domanda: perché?


 Domanda: perché?
Che ne so! Fatti 2 conti e vedi. Tra l'altro ha pure sbagliato perchè
l'inizio secolo non è bisestile nonostante sia divisibile per 4, ma
probabilmente l'approssimazione era minima.
Ipotizzo. Quanti mesi di differenza ci sono tra il 1/1/1980 e 14/03/1999?
Lui s'è fatto la distanza in giorni(che gli tornava comodo) e poi ha diviso
per quella cifra che, più o meno, gli gestisce anche i bisestili.
Bye,
Raktzo

 Quella funzione non assolve correttamente ai propri compiti...
ricominciamo con le solite affermazioni?
La funzione esiste, c'e', non e' stata deprecata, e io la uso in software
che in base ai loro calcoli, FUNZIONANO BENISSIMO.
Punto e basta, se poi vogliamo fare delle discussioni capziose, allora e'
unaltro paio di maniche (dalle mie parti vuol dire "allora e' tutta
un'altra questione")
:-)


 Non vuol dire, è una cazzata comunque.
Non ho detto che non sia una "cazzata", devo ancora rifletterci.
So per certo che senz'altro non è un bug: nel codice sorgente sono ben 
evidenti i commenti ad alcune costanti e il significato dei loro valori, 
sono stati scelti di proposito.
Secondo me, è stato scelto un algoritmo approssimativo per evitare di 
rendere la routine troppo complessa (con somme consecutive, accessi ad 
array e così via) e che possa andare bene per la maggior parte delle 
esigenze, come in effetti avviene, almeno per quanto mi riguarda.
Anzi, sono d'accordo sulla scelta operata poichè credo siano davvero 
pochi i casi in cui sia davvero necessario calcolare una distanza in 
mesi in modo davvero accurato, soprattutto considerando che è un'unità 
di misura molto larga e più il numero aumenta meno la precisione su un 
valore (che tra l'altro è a virgola mobile) assume importanza.
Nulla vieta di sostituire la chiamata a questa funzione con un proprio 
metodo di calcolo, se necessario (ma credo servirà in casi molto molto 
rari).
Ciao,
   Marco.


 metodo di calcolo
Questo è un altro discorso.  Se si discute dell'utilità di una funzione di
liberia, allora quella funzione non è utile, a mio parere, perché porta a
sbagliare.  Poi, ognuno può riscriversi tutte le funzioni che vuole.


 che in base ai loro calcoli, FUNZIONANO BENISSIMO.
Ho sempre pensato che il funzionamento casuale sia una delle
caratteristiche principali di molto software in circolazione.  Quella
funzione può produrre problemi seri.


 Ipotizzo. Quanti mesi di differenza ci sono tra il 1/1/1980 e 14/03/1999?
Tanti quanti ne puoi contare.


così, questa funzione non ha molto senso.
La funzione MinutesBetween è la prova lampante di quanto asserisci :-)
Sono diventato matto a capire quale problema vi fosse in un mio
servizio (sbaglia clamorosamente in molte situazioni).
--> Trunc(MinuteSpan(ANow, AThen));
è discutibile come sistema.
Ormai DateUtils la uso con mooolta cautela.
-- 
Ore 18.30: premo invio.

esigenze, come in effetti avviene, almeno per quanto mi riguarda.
non sono d'accordo, oltretutto da parecchio tempo le cpu sono molto
disoccupate, basta osservare con task manager, per vedere che i
processi più gravosi sono i report ed i salvaschermo, altrimenti
navigano su 3-5% dell'uitlizzo del processore. Una funzione deve essere
prima di tutto affidabile, so già sbagliare ampiamente da me, non ho
alcun bisogno di aiutanti, e se ci vuole un attimino di più amen,
sempre meglio che andare a cercare chissà che.

 sbagliare.  Poi, ognuno può riscriversi tutte le funzioni che vuole.
Non ho mai utilizzato i mesi come unità di misura per calcoli che 
richiedano di risalire ad una data precisa proprio perchè si tratta di 
un'unità spesso coperta da una certa ambiguità nel trattamento in tutti 
gli ambiti in cui se ne fa uso; non pretendo quindi che la funzione in 
esame mi calcoli con precisione il valore di un'unità di misura 
approssimativa su cui non potrei fare comunque affidamento.


 sempre meglio che andare a cercare chissà che.
Se il tutto deve essere affidabile, allora io non farei i calcoli usando 
i mesi ma adotterei semplicemente un'unità di misura più precisa, come i 
giorni, che in Delphi sono anche comodi da utilizzare in quanto 
rappresentati dalla parte intera del valore *TDateTime*.


 gli ambiti in cui se ne fa uso;
Tu sicuramente NON conosci TUTTI gli ambiti in cui se ne fa uso, quindi
evita di esprimerti a riguardo.  Io ho lavorato per società di lavoro
interinale in cui l'unità di lavoro era il mese e non il giorno.  In quei
contesti, quella funziona HA creato problemi ed è stata subito sostituita.


 conto di quanta CPU rimane utilizzata nei PC attuali.
E' di questo che si sta parlando: lo scopo per cui l'algoritmo è stato
progettato.  Nel caso specifico, lo scopo per cui l'algoritmo è stato
progettato è dichiarato dal nome della funzione che lo implementa, solo
che la funzione, sfortunatamente, non lo implementa come dovrebbe.
Uno sbaglio è sempre uno sbaglio, anche se viene denunciato formalmente
nell'help.


 in mesi, non ne sono contento.
La distanza in mesi tra due mesi è un calcolo che deve essere fatto in 
molte situazioni e deve essere fatto in modo preciso, non secondo 
approssimazioni bizzarre.  Non posso pensare che, a meno di dire 
volutamente una stupidaggine, tu creda realmente in ciò che hai scritto.

 tu creda realmente in ciò che hai scritto.
Eh, vorrà dire che ne subirà i danni la mia immagine personale... :-D


Se verifichi la data e se la data è superiore a 90 gg all'installazione
invii un messaggio di errore. Se invece è superiore (che ne so a 180gg)
cancelli il file .exe.
In questo modo dovresti riuscire a sopravvivere.
Ciao
Mario - (
mari...@inwind.it
)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/