PDA

Visualizza la versione completa : [C++] Funzione per ottenere la data attuale


Squall1988
07-01-2005, 14:56
Volevo sapere se esiste qualche funzione che mi restituisce la data attuale, possibilmente sotto forma di 3 valori (giorno del mese, mese, anno). Grazie mille se deciderete di aiutarmi :) :maLOL:

netarrow
07-01-2005, 15:01
inizia guardando la seguente Pillola (http://forum.html.it/forum/showthread.php?s=&threadid=563516)

:ciauz:

Squall1988
07-01-2005, 15:21
credo ke tutto ciò sia decisamente al di sopra delle mie conoscenze... nn c'è qualkosina di + semplice???

netarrow
07-01-2005, 18:29
se sei in windows e possiedi l'header dos.h (mi sembra sia incluso con borland, ma nn ricordo di preciso), includilo e usa la funzione getDate(), che ritorna la data nel tuo formato richiesto.

Per la pillola, provo a riscriverti l'esempio adattato al tuo caso... visto che è C++ ti farei una classe, ma se hai appena iniziato potresti non aver ancora affrontato l'OOP, quindi faccio una funzione:



#include <ctime>
#include <new>
#include <iostream>

using namespace std;

int* getData();

int main() {
int* data = new int[3];

data = getData();

cout << data[0] << "/" << (data[1] + 1) << "/"
<< (data[2] + 1900) << endl;

return 0;

}

int* getData() {
time_t data = time(NULL);//data salvata in data
tm* tempo = localtime(&data);//inizializza struttura tm
int* times = new int[3];//array che contiene gm, m, a
times[0] = tempo->tm_mday;//giorno mese
times[1] = tempo->tm_mon;//mese
times[2] = tempo->tm_year;//anno

return times;
}


Ora chiarisco alcune cose:

data[0], in main, contiene un valore che va da 1 a 31, quindi non necessita di interventi, al contrario data[1] contiene il mese e va da 0 a 11, quindi dovrai sempre aumentare di uno il valore(come ho fatto nel codice), data[2], infine, ritorna la differenza tra l'anno attuale e il 1900, quindi basta fare l'operazione inversa e sommare 1900 a data[2], che in questo caso varrà 105.



:ciauz:

pprllo
07-01-2005, 22:15
Prova questo


#include <time>
#include <iostream>
using namespace std;

int main()
{
time_t ct;
ct = &time(NULL);
cout << ctime(&ct);
}


Renditi conto dell'output che produce poi te lo formatti come vuoi.

netarrow
07-01-2005, 22:36
Originariamente inviato da pprllo
Prova questo


#include <time>
#include <iostream>
using namespace std;

int main()
{
time_t ct;
ct = &time(NULL);
cout << ctime(&ct);
}


Renditi conto dell'output che produce poi te lo formatti come vuoi.

Sei sicuro che compili così? Se non va prova con questo:



#include <ctime>
#include <iostream>
using namespace std;

int main()
{
time_t ct;
ct = time(NULL);
cout << ctime(&ct);

return 0;
}


Il risultato mi sembra quello più adatto alla tua richiesta:

Fri Jan 07 22:36:20 2005

:ciauz:

pprllo
07-01-2005, 22:45
Si in effetti sarebbe interessante capire come mi è venuto di mettere "&" davanti a "time(NULL)" prima di postarlo (tanto più che l'ho testato e nel codice che ho sul PC "&" non c'è). E' giusto quello di NetArrow.

Fla@sh_b
08-01-2005, 10:38
Ciao! Anch'io recentemente ho dovuto risolvere lo stesso prolema. Vi posto la funzione che ho scritto (in ANSI C).


int readDate(int id)
{
time_t date;
struct tm * brokendown=NULL;
char * readableDate=NULL;

time(&date); //Lettura della data

//Converto il calendar time dato in formato time_t
//in un broken-down time.

brokendown=localtime(&date);
readableDate=asctime(brokendown); //Memorizzo la data in un formato leggibile!

switch(id) {

case 1: return brokendown->tm_mday;


case 2: return brokendown->tm_mon;


case 3: return brokendown->tm_year;


case 4: printf("%s", readableDate);
break;
}

return -1;
}


Spero di esser stato utile a qualcuno!

:ciauz:

Squall1988
08-01-2005, 12:10
grazie mille a tutti sono riuscito :D

Loading