View Full Version : Confrontare le Date in C
Rieccomi qui per l'ennesima domanda :)
Se ho delle stringhe TimeStamp in formato GMT (quindi giorno-mese-anno ore.minuti.secondi ) e voglio confrontarle per vedere se un certo Timestamp è precedente o successivo ad un altro, come faccio?
Devo per forza usare la struttura tm ? (non ricordo in che libreria sta)...
Conoscete librerie che fanno questo?
Ciao
Puoi operare anche sui time_t con la funzione difftime...
La struttura tm è in time.h...
Comunque credo che la soluzione migliore sia di prendere la stringa a riempire i vari campi di una struttura tm con sscanf...
sscanf(oraGMT, "%d-%d-%d %d.%d.%d",....);
Dopo converti le due strutture tm in time_t con mktime e usi difftime per ottenere il risultato...
double diff;
diff = difftime(mktime(&tm1), mktime(&tm2));
printf((diff > 0)?"tm2 è maggiore di tm1 di %d secondi":"tm1 è maggiore di tm2 di %d secondi", (int)diff);
Comunque in ogni caso è sempre bene consultare LA SACRA SCRITTURA :
http://www.gnu.org/manual/glibc-2.2.5/html_node/Date-and-Time.html#Date%20and%20Time
:D :D :D
Vedrai che ti tornerà utile ... (perchè, se non ricordo male, sei uno unixiano).
Originariamente inviato da mjordan
Vedrai che ti tornerà utile ... (perchè, se non ricordo male, sei uno unixiano).
Grazie anhe a te...però sbagli...io sono "Windowsiano" :p :p
Originariamente inviato da fedo
Grazie anhe a te...però sbagli...io sono "Windowsiano" :p :p
Ok. Nessuno è perfetto :D :D :D :D :D
rieccomi a rompere :D
stavolta vorrei sapere questo:
ho una struct (chiamiamola "st") i cui elementi sono
char * elem1;
char *elem2;
int elem3;
Vorrei sapere qual è la sintassi per far stampare a video i valori contenuti in quegli elementi.
Usando printf(st->elem1) ...etc
a volte non mi ritorna nulla oppure mi crasha...
Inoltre non so se scrivere *nomevariabile oppure * nomevariabile (notare lo spazio nel secondo caso) , vogliono dire cose diverse...
Scusate, ma i puntatori li odio perchè sono Javista ;)
Per lo spazio puoi fare come più ti piace...
Ma quei puntatori a cosa puntano ? Se fai due puntatori, non li fai puntare a niente e poi li usi è normale che ti crashi il programma...
puntano ad aree di memoria allocate prima con malloc e poi inizializzate con dei caratteri tramite strcpy..
non và bene?
Sì, ma dovresti farci vedere il codice ;)
ok, quel problema l' ho risolto..
qualcuno se ne intende di bufferizzazione in RAM?
FILE *fp_cache;
/*** Prepara il registro di cache ad essere usato. ***/
void cache_init()
{
if ((fp_cache = fopen("cache_reg.dat","r+")) == NULL) printf("Errore nell'apertura del registro di cache");
setvbuf(fp_cache,NULL,_IOLBF,BUFF_LEN); //Bufferizza in RAM il registro di cache per migliorare le prestazioni in lettura e scrittura.
}
Le operazioni che faccio in seguito sul puntatore fp_cache (tipo fread(fp...etc), è sicuro che me le fa in RAM e non su disco?
E poi aggiorna il file su disco quando il buffer è pieno o in momenti di calma... questa funzione setvbuf non l'ho mai usata..
per la cronaca,tutta questa storia è per un server http.
Ciao ciao
Originariamente inviato da fedo
ok, quel problema l' ho risolto..
qualcuno se ne intende di bufferizzazione in RAM?
FILE *fp_cache;
/*** Prepara il registro di cache ad essere usato. ***/
void cache_init()
{
if ((fp_cache = fopen("cache_reg.dat","r+")) == NULL) printf("Errore nell'apertura del registro di cache");
setvbuf(fp_cache,NULL,_IOLBF,BUFF_LEN); //Bufferizza in RAM il registro di cache per migliorare le prestazioni in lettura e scrittura.
}
Le operazioni che faccio in seguito sul puntatore fp_cache (tipo fread(fp...etc), è sicuro che me le fa in RAM e non su disco?
E poi aggiorna il file su disco quando il buffer è pieno o in momenti di calma... questa funzione setvbuf non l'ho mai usata..
per la cronaca,tutta questa storia è per un server http.
Ciao ciao
Ti ripeto, cerca sulla BIBBIA ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.