Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Differenza tra due date
Forum - C/C++ - Differenza tra due date

Avatar
Mark (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2007

Segnala al moderatore
Postato alle 19:58
Mercoledì, 17/01/2007
Ho il seguente problema: dovrei calcolare la differenza, in giorni, tra due date, anche a distanza di parecchi anni.

Ci provo da oggi pomeriggio, ma non sono arrivato a nessun risultato.

Sul forum ho trovato una soluzione riportata al seguente link: http://www.pierotofy.it/pages/extras/forum/2/9854-differen ...,
La soluzione non fa al caso mio perchè non ho ancora studiato la maggior parte delle cose riportate in quel codice sorgente.

Come posso fare? E' possibile trovare un metodo più semplice che utilizzi i fondamenti basilari del linguaggio? Dovrei utilizzare soltanto le strutture di selezione, i cicli e gli array; per il resto vago nelle tenebre.

Grazie per chi risponderà al mio HELP!!!

Ultima modifica effettuata da Mark il 17/01/2007 alle 20:09
PM Quote
Avatar
Reese (Ex-Member)
Pro


Messaggi: 179
Iscritto: 09/08/2006

Segnala al moderatore
Postato alle 20:47
Mercoledì, 17/01/2007
Beh, se la data è una stringa (array di caratteri), allora devi solo estrarre gli interi che rappresentano giorno, mese ed anno, e poi effettuare delle differenze con riporti, partendo dalla differenza tra gli interi che rappresentano i giorni.

PM Quote
Avatar
Mark (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2007

Segnala al moderatore
Postato alle 21:07
Giovedì, 18/01/2007
Grazie per avermi risposto indicandomi una possibile soluzione, ma non sono ancora in grado di fare quello che mi hai detto.

Nel frattempo ho lavorato sodo e sto ottenendo buoni risultati; a breve posterò il sorgente...

PM Quote
Avatar
Mark (Normal User)
Newbie


Messaggi: 6
Iscritto: 13/01/2007

Segnala al moderatore
Postato alle 10:35
Domenica, 21/01/2007
Questa è la soluzione a cui sono arrivato dopo diversi tentativi.

Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.     int data1[3], data2[3], ggmese[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31};
  9.     int gtrascorsi, somma=0, diffanni, gganni, ggfineanno, gginizioanno, fsomma=0, isomma=0;
  10.     //INPUT DATA POSTERIORE
  11.     cout << "Inserire la data posteriore" << endl;
  12.     cout << "Giorno: ";
  13.     cin >> data1[0];
  14.     cout << "Mese: ";
  15.     cin >> data1[1];
  16.     cout << "Anno: ";
  17.     cin >> data1[2];
  18.     //INPUT DATA ANTERIORE
  19.     cout << "\nInserire la data anteriore" << endl;
  20.     cout << "Giorno: ";
  21.     cin >> data2[0];
  22.     cout << "Mese: ";
  23.     cin >> data2[1];
  24.     cout << "Anno: ";
  25.     cin >> data2[2];
  26.     //INIZIO BLOCCO1: VERIFICA DATA CON DIFF. ANNI = 0
  27.     if (data1[2]-data2[2] == 0) //BLOCCO DIFFERENZA ANNI = 0
  28.     {
  29.        if (data1[1]-data2[1] == 0){ //BLOCCO DIFFERENZA MESI = 0
  30.            gtrascorsi = data1[0]-data2[0];}
  31.        
  32.        else
  33.        if (data1[1]-data2[1] == 1){ //BLOCCO DIFFERENZA MESI = 1
  34.            gtrascorsi = ggmese[data2[1]-1]-data2[0]+data1[0];}
  35.    
  36.        else
  37.        if (data1[1]-data2[1] > 1){  //BLOCCO DIFFERENZA MESI > 1
  38.            for (int a=data2[1]; a < data1[1]-1; a++){
  39.            somma+=ggmese[a];}
  40.            }
  41.             gtrascorsi = somma+(ggmese[data2[1]-1]-data2[0]+data1[0]);
  42.     }  
  43.     //FINE BLOCCO1. - INIZIO BLOCCO2: VERIFICA DATA CON DIFF. ANNI = 1
  44.     else if (data1[2]-data2[2] == 1)
  45.     {
  46.        ggfineanno=ggmese[data2[1]-1]-data2[0];
  47.        for (int a=data2[1]; a <= 11; a++){
  48.            fsomma+=ggmese[a];
  49.            }
  50.        gginizioanno=data1[0];
  51.        for (int a=data1[1]-2; a >= 0 ; a--){
  52.            isomma+=ggmese[a];
  53.            }
  54.        gtrascorsi = ggfineanno +  gginizioanno + fsomma + isomma;
  55.     }
  56.     //FINE BLOCCO2. - INIZIO BLOCCO3: VERIFICA DATA CON DIFF. ANNI > 1
  57.     else if (data1[2]-data2[2] > 1)
  58.     {
  59.        gganni=(data1[2]-data2[2]-1)*365;
  60.        
  61.        ggfineanno=ggmese[data2[1]-1]-data2[0];
  62.        for (int a=data2[1]; a <= 11; a++){
  63.            fsomma+=ggmese[a];
  64.            }
  65.        gginizioanno=data1[0];
  66.        for (int a=data1[1]-2; a >= 0 ; a--){
  67.            isomma+=ggmese[a];
  68.            }
  69.        gtrascorsi = ggfineanno +  gginizioanno + fsomma + isomma + gganni;
  70.     }
  71.    
  72.     cout << "\nSono trascorsi " << gtrascorsi << " giorni" << endl;    
  73.    
  74.     system("PAUSE");
  75.     return EXIT_SUCCESS;
  76. }



E' corretta o vi è la presenza di errori?

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 14:32
Domenica, 21/01/2007
ti consiglio di usare l'algoritmo usato nel programma che hai linkato e in questo(dove ci sono magari meno fronzoli ed è più immediato da capire):

http://www.pierotofy.it/pages/sorgenti/browse/15726/1684/

E' più efficace e più immediato da implementare.

Ultima modifica effettuata da netarrow il 21/01/2007 alle 14:33
PM Quote