2011-01-31 9 views
5

Ho tempo in formato epoca.
Voglio solo recuperare anno da esso.Come convertire il tempo Epoch all'anno

come dovremmo farlo in c o C++?

In realtà ho tempo da epoch in secondi e ho bisogno di calcolare l'età a seconda di esso.
Quindi l'input sarà secondi da epoch e out put dovrebbe essere basato sull'età in base alla data corrente.

Grazie,
PP.

+1

dati di input e output previsti? –

risposta

3

In C timestamp (cioè: secondi dal epoca) sono in genere memorizzati in time_t, mentre le date umano-saggi sono memorizzati nella struttura tm. È necessaria una funzione che converta time_t s in tm s.

gmtime o localtime sono due funzioni standard C che fanno il vostro lavoro.

struct tm *date = gmtime(your_time); 
printf("Year = %d\n", date->tm_year); 

Attenzione che queste funzioni non sono thread-safe. Potrai trovare una versione rientrante sui sistemi POSIX (Linux, Mac OS x, ...): gmtime_r e localtime_r

+1

Si noti che il campo 'tm_year' è in anni dal 1900, quindi è necessario aggiungere 1900 a quel campo per ottenere l'anno effettivo. –

5

Utilizzando i gmtime o localtime funzioni per convertire il time_t ad un struct tm. Quindi è possibile utilizzare il campo tm_year della struttura per ottenere l'anno.

Oppure, per l'utilizzo offline, è possibile utilizzare un convertitore Web, like this.

Edit:

codice di esempio:

time_t nowEpoch = time(NULL); 
struct tm* nowStruct = gmtime(&nowEpoch); 
int year = nowStruct->tm_year + 1900; 
+0

puoi pubblicare un codice di esempio per questo, che ti aiuterà di più. Grazie. – User7723337

+4

Un convertitore Web * offline * viene utilizzato? –

+0

@Donal, offline come non in un'applicazione :) –

0

In realtà ho tempo dal periodo in pochi secondi e ho bisogno di calcolare l'età in funzione su di esso. Quindi l'input sarà secondi dall'epoch e l'out put dovrebbe essere basato sull'età in base alla data corrente.

Per questo non è necessario l'anno, il mese, il giorno di nessuno dei due timestamp. Sottrai le due epoche volte per ottenere un valore in secondi. Dividere per 60 * 60 * 24 * 365 a get a value in years:

int main() { 
    time_t past = 1234567890; 
    time_t now = time(0); 
    double years = double(now - past)/60/60/24/365; 
    cout << "years = " << years << '\n'; 
    return 0; 
} 

Questo sarà disattivata tramite un secondo salto che si sono verificati tra i due timestamp, ma, significativamente, dà il valore corretto entro un anno. Ad esempio, dal 1 ° dicembre 2010 al 1 ° gennaio 2011 è circa 1/12 ° anno, non 1 anno.

Problemi correlati