Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: [C] confronto fra date

  1. #1

    [C] confronto fra date

    ho una data in formato time_t (restituita da fstat) ed una da leggere da un file di testo in formato "umano"...
    Devo farmi una funzioncina ausiliaria che mi dica se la prima è più vecchia della seconda... cosa mi conviene fare?

    sempre tramite una funzioncina ausiliaria la data che sta sul file l'avevo letta in un una struct tm... suppongo che siano confrontabili più facilmente i timestamp.. se la supposizione è giusta:

    1) come strasformo la struct in time_t?

    2) c'è un modo alternativo per acquisire la data che leggo dal file direttamente in timestamp? (per ora tokenizzo la stringa e laa scrivo pezzo per pezzo nella struct tm)

    3) per confrontare i 2 timestamp come faccio??


  2. #2

  3. #3

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Allora, se riesci ad avere la data in formato tm (il formato standard della libreria ctime) puoi usare la funzione mktime per ottenere un altro time_t, quindi ti basta semplicemente un confronto. Insomma tipo così.
    codice:
    time_t tempo2;
    tempo2 = mktime(_Tempo_Formattato);
    if (tempo1>=tempo2)
       blablabla
    else
       blablabla

  5. #5
    allora.. il punto è questo:

    ho una funzione che mi legge da file una stringa che mi rappresenta una data in formato "umano"... e mi crea una struct tm per memorizzare la data ricavata da questa stringa.

    codice:
        while(buffer[i] != '\n') str[j++] = buffer[i++];//leggo tutta la riga relativa alla data e ora
        str[j++]='\0';
    
        //tokenizzo la stringa e memorizzo la data nella struct
        v_data = strtok(str," ");//ho letto la data
        v_ora = strtok(NULL," ");//ho letto l'ora
        data.tm_mday = atoi(strtok(v_data, "/"));
        data.tm_mon  = atoi(strtok(NULL, "/"));
        data.tm_year = atoi(strtok(NULL, "/"));
        data.tm_hour = atoi(strtok(v_ora,":"));
        data.tm_min = atoi(strtok(NULL,":"));
    E fin qui ci siamo perchè stampando la struct elemento per elemento è come mi aspetto.

    Questa funzione dovrebbe restituirmi però la data in formato time_t per confrontarla con un'altra time_t come dici tu in un'altra funzione...

    come faccio a far restituire un time_t alla funzione che legge la data da file? è necessario passare da una struct tm o c'è un metodo diretto? e se è necessario passare dalla struct come la converto? è questo che non capisco

    grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Allora tu hai ottenuto la struct ? Bene. Ora fai:
    codice:
    time_t tempo;
    tempo = mktime(data);
    return tempo;
    mktime() è appunto una funzione di libreria che riceve per argomento un tm e restituisce un time_t

  7. #7
    Originariamente inviato da pprllo
    Allora tu hai ottenuto la struct ? Bene. Ora fai:
    codice:
    time_t tempo;
    tempo = mktime(data);
    return tempo;
    mktime() è appunto una funzione di libreria che riceve per argomento un tm e restituisce un time_t
    ok.. perfetto.. ci riprovo dopo e ti faccio sapere.. avevo provato qualcosa dle genere ma sembrava non funzionare...


    grazie

  8. #8
    ecco... ricordavo che qualcosa non andava..

    incompatible time of argument 1 of mktime



    codice:
    time_t get_date()
    {
      struct tm data;
      int i=0,j=0,righe=1;
      char str[18];
      char *v_ora,*v_data;
    
      while(righe<4) //scarto le prime tre righe
        if(buffer[i++]=='\n') righe++;
    
        while(buffer[i] != '\n') str[j++] = buffer[i++];//leggo tutta la riga relativa alla data e ora
        str[j++]='\0';
    
        //tokenizzo la stringa e memorizzo la data nella struct
        v_data = strtok(str," ");//ho letto la data
        v_ora = strtok(NULL," ");//ho letto l'ora
        data.tm_mday = atoi(strtok(v_data, "/"));
        data.tm_mon  = atoi(strtok(NULL, "/"));
        data.tm_year = atoi(strtok(NULL, "/"));
        data.tm_hour = atoi(strtok(v_ora,":"));
        data.tm_min = atoi(strtok(NULL,":"));
    
        return mktime(data);
    }
    tra l'altro mi chiedevo.. che tipo è in definitiva un time_t? con quale specificatore lo stampo con la printf per avere un riscontro (per un debug veloce)???

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Gli devi passare l'indirizzo:
    codice:
    ...
    return mktime(&data);

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Ps, time_t è tipo un integer.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.