Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247

    Ottenere una data da una altra data

    Salve a tutti espongo il mio problema.

    Ho una data in formato YYYY-MM-GG hh:mm:ss. Quello che vorrei ottenere è la stessa data aggiornata di un certo numero di ore.
    Esempio:

    2006-06-21 12:30:04 gli sommo due ore e quindi ottengo 2006-06-21 14:30:04.

    Quello che faccio ora è riempirmi una struttura tm con i parametri della data originale,ottenere con la mktime il time_t; a questo, sommare o sottrarre il numero di secondi che mi servono e poi riottenere di nuovo una data formattata come YYYY-MM-GG hh:mm:ss che è quella nuova.
    Volevo chiedere se ci sono problemi in relazione al fuso orario con la mktime. Ossia quando io riempio la mia struttura tm con i parametri di una data e poi faccio il mktime, vengono applicate modifche?Il time_t che ottengo è esattamente quello della data che gli ho passato?
    Ci sono metodi più semplici per fare questo?

    Grazie per l'aiuto.
    Andrea

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: Ottenere una data da una altra data

    Originariamente inviato da quincy
    Quello che faccio ora è riempirmi una struttura tm con i parametri della data originale,ottenere con la mktime il time_t; a questo, sommare o sottrarre il numero di secondi che mi servono e poi riottenere di nuovo una data formattata come YYYY-MM-GG hh:mm:ss che è quella nuova.
    Ok, non fa una piega.

    Originariamente inviato da quincy
    Volevo chiedere se ci sono problemi in relazione al fuso orario con la mktime. Ossia quando io riempio la mia struttura tm con i parametri di una data e poi faccio il mktime, vengono applicate modifche?Il time_t che ottengo è esattamente quello della data che gli ho passato?
    Ma la data originale è "locale" o GMT??? Per passare da un time_t a un struct tm* puoi usare gmtime() o localtime(). Entrambe fanno la conversione ma localtime prende in considerazione anche il time-zone locale impostato nel sistema.

    Originariamente inviato da quincy
    Ci sono metodi più semplici per fare questo?
    Più semplici credo di no ... queste funzioni almeno sono "standard".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di quincy
    Registrato dal
    Aug 2003
    Messaggi
    247
    Ma la data originale è "locale" o GMT??? Per passare da un time_t a un struct tm* puoi usare gmtime() o localtime(). Entrambe fanno la conversione ma localtime prende in considerazione anche il time-zone locale impostato nel sistema.
    Perchè fà differenza.
    Io voglio semplicemente che ottenere la vecchia data +- i minuti che voglio aggiungere.

    Quindi secondo te devo usare la gmtime?
    Nelle prove che ho fatto se uso la gmtime non ottengo la data voluta. perchè sono sfasato di 1 ora che non capisco da dove prende.

    Avete pezzi di codice che mi mostrano come fare?
    Io faccio questo:
    char datetime[20];
    struct tm *tt;
    struct tm t;
    int TZ = -120;
    time_t temp;
    if (strlen(datetime)!=19) return 0;
    t.tm_hour=atoi(datetime+11);
    t.tm_isdst=-1;//necessario , non UTC
    t.tm_mday=atoi(datetime+8);
    t.tm_min=atoi(datetime+14);
    t.tm_mon=atoi(datetime+5)-1;
    t.tm_sec=atoi(datetime+17);
    t.tm_wday=0;
    t.tm_yday=0;
    t.tm_year=atoi(datetime+0)-1900;
    temp= mktime(&t);
    temp+= -TZ*60;
    tt =localtime(&t);
    strftime(datetime,20,"%Y-%m-%d %H:%M:%S",tt);

    Sembra non andare
    Aiuto per favore!
    Andrea

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Ho provato questo:
    codice:
    char   str[40];
    struct tm orig, *new;
    time_t t1;
    
    memset (&orig, 0, sizeof (orig));
    orig.tm_year = 2006 - 1900;
    orig.tm_mday = 1;
    orig.tm_mon = 1 - 1;
    
    strftime (str, sizeof (str), "%Y-%m-%d %H:%M:%S", &orig);
    printf ("%s\n", str);
    
    t1 = mktime (&orig);
    
    t1 += 6*3600;   /* +6 ore */
    
    new = localtime (&t1);
    
    strftime (str, sizeof (str), "%Y-%m-%d %H:%M:%S", new);
    printf ("%s\n", str);
    Funziona:
    2006-01-01 00:00:00
    2006-01-01 06:00:00
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.