Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,610

    date file e date http

    allora sono incasinatissimo
    ho fatto un programma che via http recupera un file
    tramite l'header mi prendo il campo last-modified

    poi prendo la data di un file dal disco ora devo confrontare le due date
    solo che :
    quella del protocollo è così:
    "Wed, 26 Feb 2003 19:22:35 GMT\0"

    quella del file è così
    "00/00/0 00:00" (nn fate a caso a 00 ecc.)
    sono disperato nn so proprio come fare
    mi date una mano

    nn ho trovato un funzione che fa al caso mio ho cercato anche su msdn

  2. #2
    in generale:

    devi standardizzare e splittare le 2 stringhe...

    nel senso che devi estrapolare day, month, year, hour, minute
    sia dalla stringa1 che dalla stringa2 (quindi da 2 variabili,
    ne ricaverai 10... day1, day2 ecc...)

    una volta standardizzate le varie stringhe (es: gen == 00, feb == 01)
    le converti da tipo stringa in tipo numerico e poi le confronti.
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,610
    Originariamente inviato da Johnny_Depp
    in generale:

    devi standardizzare e splittare le 2 stringhe...

    nel senso che devi estrapolare day, month, year, hour, minute
    sia dalla stringa1 che dalla stringa2 (quindi da 2 variabili,
    ne ricaverai 10... day1, day2 ecc...)

    una volta standardizzate le varie stringhe (es: gen == 00, feb == 01)
    le converti da tipo stringa in tipo numerico e poi le confronti.
    è proprio questo , ma nn so come farlo nn esiste qualche funzione che mi formatta allo stesso modo entrambe le stringhe ?

    (stiamo parlando in c/c++)

  4. #4
    bhe, in time.h ci sono un paio di funzioni che restituiscono delle stringhe in formato testo, a seconda dei parametri che gli dai

    se non erro si chiama asctime

    puoi scegliere il formato passando delle stringhe come
    "%g/%m/%y %H:%N:%S"

    adesso ti sto facendo un esempio, probabilmente questi parametri non fanno cio' che vuoi, ma se guardi bene tra le opzioni possibili, probabilmente trovi quello che fa al caso tuo

    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,610
    Originariamente inviato da akiross
    bhe, in time.h ci sono un paio di funzioni che restituiscono delle stringhe in formato testo, a seconda dei parametri che gli dai

    se non erro si chiama asctime

    puoi scegliere il formato passando delle stringhe come
    "%g/%m/%y %H:%N:%S"

    adesso ti sto facendo un esempio, probabilmente questi parametri non fanno cio' che vuoi, ma se guardi bene tra le opzioni possibili, probabilmente trovi quello che fa al caso tuo

    ciao
    asctime(const struct tm *__tblock);
    nn esiste partono tutte da una struttura tm che non ho
    l'unica cosa che ho provato a fare e
    convertire un stringa in time_t castando a long
    e poi tramite la time_t ottenere una tm ma da risultati sballati!

  6. #6
    si, in effetti non e' cosi' immediata l'utilizzo della time
    beccati questo esempio che mi ero fatto per me
    codice:
    int main(int argc, char *argv[])
    {
    	tm tempo;
    	time_t data;
    	data = time(NULL); // oppure time(&data);
    	tempo = *gmtime(&data);
    	cout << asctime(&tempo); // va a capo da sola
    	char string[41];
    	strftime(string, 41, "%A %d %B %Y", &tempo);
    	/* MANUALE pas 747
    	%a = Mon
    	%A = Monday
    	%b = Gen
    	%B = Genuary
    	%c = stringa standard per data e ora
    	%d = giorno del mese 1-31
    	%H = ora 0-23
    	%m = mese 1-12
    	%M = minuto 0-59
    	%S = secondo 0-59
    	%Y = anno XXXX
    	%y = anno XX
    	*/
    	cout << string << endl;
    	return 0;
    }
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,610
    Originariamente inviato da akiross
    si, in effetti non e' cosi' immediata l'utilizzo della time
    beccati questo esempio che mi ero fatto per me
    codice:
    int main(int argc, char *argv[])
    {
    	tm tempo;
    	time_t data;
    	data = time(NULL); // oppure time(&data);
    	tempo = *gmtime(&data);
    	cout << asctime(&tempo); // va a capo da sola
    	char string[41];
    	strftime(string, 41, "%A %d %B %Y", &tempo);
    	/* MANUALE pas 747
    	%a = Mon
    	%A = Monday
    	%b = Gen
    	%B = Genuary
    	%c = stringa standard per data e ora
    	%d = giorno del mese 1-31
    	%H = ora 0-23
    	%m = mese 1-12
    	%M = minuto 0-59
    	%S = secondo 0-59
    	%Y = anno XXXX
    	%y = anno XX
    	*/
    	cout << string << endl;
    	return 0;
    }
    ciao
    ok queste cose le sapevo ma nn ho ancora risolto il mio problema

  8. #8
    devi fare una cosa del genere:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    void std_date_format(char *s1, char *s2);
    
    
    int main()
    {
        char str1[]="Wed, 26 Feb 2003 12:22:35 GMT\0";
        char str2[]="26/02/03 16:22"; // dd/mo/yy/ hh:mm
        
        //trasforma entrambe le stringhe nel seg. formato (dd mo yy hh mm)
    
        std_date_format(str1, str2);     
        
        system("PAUSE");
        return 0;
    }
    
    
    
    
    
    
    void std_date_format(char *s1, char *s2)
    {
        char dd1[3], mo1[3], yy1[3], hh1[3], mm1[3];
        char dd2[3], mo2[3], yy2[3], hh2[3], mm2[3];    
    
        int idd1, imo1, iyy1, ihh1, imm1;
        int idd2, imo2, iyy2, ihh2, imm2;
    
        int i=0;
        
        
        
    
    
        //standardizzo STR1
    
    
        while(1) // catturo dd1
        { 
            if(s1[i] <= '9' && s1[i] >= '0')
            {
                dd1[0]=s1[i];
                dd1[1]=s1[++i];
                dd1[2]='\0';
                break;
            }
            i++;
        }   
        
        i++;    
                
        while(1) // catturo mo1  (Gen==00, Feb==01, Mar==02, Apr==03, ecc...)
        { 
            if(s1[i] == 'G' && s1[i+1] == 'e' && s1[i+2] == 'n')
            {
                mo1[0]='0';
                mo1[1]='1';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'F' && s1[i+1] == 'e' && s1[i+2] == 'b')
            {
                mo1[0]='0';
                mo1[1]='2';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'M' && s1[i+1] == 'a' && s1[i+2] == 'r')
            {
                mo1[0]='0';
                mo1[1]='3';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'A' && s1[i+1] == 'p' && s1[i+2] == 'r')
            {
                mo1[0]='0';
                mo1[1]='4';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'M' && s1[i+1] == 'a' && s1[i+2] == 'y')
            {
                mo1[0]='0';
                mo1[1]='5';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'J' && s1[i+1] == 'u' && s1[i+2] == 'n')
            {
                mo1[0]='0';
                mo1[1]='6';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'J' && s1[i+1] == 'u' && s1[i+2] == 'l')
            {
                mo1[0]='0';
                mo1[1]='7';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'A' && s1[i+1] == 'u' && s1[i+2] == 'g')
            {
                mo1[0]='0';
                mo1[1]='8';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'S' && s1[i+1] == 'e' && s1[i+2] == 'p')
            {
                mo1[0]='0';
                mo1[1]='9';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'O' && s1[i+1] == 'c' && s1[i+2] == 't')
            {
                mo1[0]='1';
                mo1[1]='0';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'N' && s1[i+1] == 'o' && s1[i+2] == 'v')
            {
                mo1[0]='1';
                mo1[1]='1';
                mo1[2]='\0';
                i=i+2;
                break;
            }
            else if(s1[i] == 'D' && s1[i+1] == 'e' && s1[i+2] == 'c')
            {
                mo1[0]='1';
                mo1[1]='2';
                mo1[2]='\0';
                i=i+2;
                break;
            }
                   
            i++;
        }     
        
        i++;
    
        while(1) // catturo yy1
        { 
            if(s1[i] <= '9' && s1[i] >= '0')
            {
                yy1[0]=s1[i+2];
                yy1[1]=s1[i+3];
                yy1[2]='\0';
                i=i+3;
                break;
            }
            i++;
        }   
        
        i++;    
        
        while(1) // catturo hh1
        { 
            if(s1[i] <= '9' && s1[i] >= '0')
            {
                hh1[0]=s1[i];
                hh1[1]=s1[++i];
                hh1[2]='\0';
                break;
            }
            i++;
        }   
        
        i++;    
        
        while(1) // catturo mm1
        { 
            if(s1[i] <= '9' && s1[i] >= '0')
            {
                mm1[0]=s1[i];
                mm1[1]=s1[++i];
                mm1[2]='\0';
                break;
            }
            i++;
        }   
    
    
        
            
        //standardizzo STR2        
    
     
        i=0;  
     
        while(1) // catturo dd2
        { 
            if(s2[i] <= '9' && s2[i] >= '0')
            {
                dd2[0]=s2[i];
                dd2[1]=s2[++i];
                dd2[2]='\0';
                break;
            }
            i++;
        }   
        
        i++;    
                                   
        while(1) // catturo mo2
        { 
            if(s2[i] <= '9' && s2[i] >= '0')
            {
                mo2[0]=s2[i];
                mo2[1]=s2[++i];
                mo2[2]='\0';
                break;
            }
            i++;
        }   
        
        i++;    
    
        while(1) // catturo yy2
        { 
            if(s2[i] <= '9' && s2[i] >= '0')
            {
                yy2[0]=s2[i];
                yy2[1]=s2[++i];
                yy2[2]='\0';
                break;
            }
            i++;
        }   
        
        i++;    
        
        while(1) // catturo hh2
        { 
            if(s2[i] <= '9' && s2[i] >= '0')
            {
                hh2[0]=s2[i];
                hh2[1]=s2[++i];
                hh2[2]='\0';
                break;
            }
            i++;
        }   
        
        i++;    
        
        while(1) // catturo mm2
        { 
            if(s2[i] <= '9' && s2[i] >= '0')
            {
                mm2[0]=s2[i];
                mm2[1]=s2[++i];
                mm2[2]='\0';
                break;
            }
            i++;
        }   
                        
                                
        printf("STR1 : %s %s %s %s %s\n", dd1, mo1, yy1, hh1, mm1);
        printf("STR2 : %s %s %s %s %s\n", dd2, mo2, yy2, hh2, mm2);
        
        
        // CONFRONTO LE 2 DATE (stringhe)
        
        idd1=atoi(dd1);
        imo1=atoi(mo1);
        iyy1=atoi(yy1);
        ihh1=atoi(hh1);
        imm1=atoi(mm1);
        
        idd2=atoi(dd2);
        imo2=atoi(mo2);
        iyy2=atoi(yy2);
        ihh2=atoi(hh2);
        imm2=atoi(mm2);
        
        
        if(iyy1 > iyy2)
        { 
            printf("\nSTR1 maggiore di STR2\n");
        }
        else if(iyy1 < iyy2)
        { 
            printf("\nSTR1 minore di STR2\n");
        }
        else
        {
            if(imo1 > imo2)
            {
                printf("\nSTR1 maggiore di STR2\n");
            }
            else if(imo1 < imo2)
            {
                printf("\nSTR1 minore di STR2\n");
            }
            else
            {
                if(idd1 > idd2)
                {
                    printf("\nSTR1 maggiore di STR2\n");
                }
                else if(idd1 < idd2)
                {
                    printf("\nSTR1 minore di STR2\n");
                }
                else
                {
                    if(ihh1 > ihh2)
                    {
                        printf("\nSTR1 maggiore di STR2\n");
                    }
                    else if(ihh1 < ihh2)
                    {
                        printf("\nSTR1 minore di STR2\n");
                    }
                    else
                    {
                        if(imm1 > imm2)
                        {
                            printf("\nSTR1 maggiore di STR2\n");
                        }
                        else if(imm1 < imm2)
                        {
                            printf("\nSTR1 minore di STR2\n");
                        }
                        else
                        {
                            printf("\nSTR1 uguale a STR2\n");
                        }
                    }
                }
    
            }
                      
        }
    
       
    }
    ...Terrible warlords, good warlords, and an english song

  9. #9
    ok queste cose le sapevo ma nn ho ancora risolto il mio problema
    e perche'?
    e' semplice:
    la tua stringa e' in formato:
    "Wed, 26 Feb 2003 19:22:35 GMT\0"

    invece l'altro e' nel formato:
    "DD/MM/Y hh:mm"

    detto questo
    1. Estrai dalla 2o formato i numeri, fallo con gli stringstream, con la sscanf, come vuoi.

    2. Metti quei numerini nella struttura time_t ( o tm)

    3. Usi la funzioncina che ti ho dato per ricavare una stringa nello stesso formato della prima

    4. strcmp e vedi se coincidono (se vuoi ometti le parti che non interessano, tipo GMT/0, sempre se non ti serve)

    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  10. #10
    oh bhe, oppure usi la funzione che ha fatto Jony_depp, anche se supongo che quello che propongo io e' piu' compatto, ma piu' intricato

    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

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.