|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
[C/C++] Libreria ctime (time.h)
Ho cercato su internet un po' di documentazione su questa libreria.
Un utile uso sarebbe quello di confrontare alcune date senza doversi tirare troppo matti Non ho capito però come implementarla. In particolare, vorrei costruire due date, confrontarle tra loro e contare i giorni tra le due. Mi date una mano?
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2011
Messaggi: 381
|
Detta proprio molto grezzamente
time_t now = time(NULL); string time_string(ctime(&now)); time_string.erase(time_string.find('\n', 0), 1); ora in time_string hai una data del tipo Sun Jul 17 14:22:42 2011 a questo punto puoi smanettare con le stringhe quanto vuoi |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Quote:
Codice:
static struct tm data1, data2;
time_t a, b;
int d, m, y;
printf("Inserisci prima data: ");
scanf("%d/%d/%d", &d, &m, &y);
data1.tm_mday = d; //Range [1-31]
data1.tm_mon = m - 1; //Range [0-11]
data1.tm_year = y - 1900; //Range >= 1900
printf("Inserisci seconda data: ");
scanf("%d/%d/%d", &d, &m, &y);
data2.tm_mday = d;
data2.tm_mon = m - 1;
data2.tm_year = y - 1900;
printf("La differenza tra le due date e' di %lf giorni\n", abs(difftime(mktime(&data1), mktime(&data2))/86400));
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
Quote:
Non riesco a capire cosa sia "abs" e come mai hai dichiarato le variabili a e b.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
"abs" è semplicemente il valore assoluto, cioè se il risultato è negativo lo trasforma in positivo.
(Perché se metti la seconda data maggiore della prima viene un numero negativo)In ogni caso sì, basta assegnare i valori alle strutture ed usare la funzione "mktime" per trasformare le due date in formato UNIX. Il formato UNIX non è altro che il conteggio dei secondi passati dal 1970, ed è il modo più usato per rappresentare le date in informatica. In poche parole il tipo time_t non è altro che un intero (a 32 o 64 bit), semplicemente la scrittura "time_t" è un modo più standard per rappresentare questo valore. (un po' come i NULL dei puntatori)Avendo le due date in formato UNIX, ti basta sottrarle (a-b) per ottenere la differenza in secondi, e per ottenerla in giorni basterà dividere per 86400 (cioè 60*60*24).
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5749
|
Quote:
Popolo le due strutture, inserisco i giorni, i mesi e gli anni, ma mi dice sempre che la differenza è 0. mkdiff restituisce sempre una differenza, giusto? Se una delle due date è considerata antecedente, mi restituisce il risultato negativo, giusto? Se io evito di calcolare il modulo, posso dire che se la differenza è negativa, una data è antecedente all'altra e ho fatto il confronto. Mentre se la differenza è 0 dovrebbe significare che le due date coincidono.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:59.












(Perché se metti la seconda data maggiore della prima viene un numero negativo)








