2011-01-31 21 views
5

Tengo tiempo en formato epoch.
Solo quiero recuperar Year from it.Cómo convertir el tiempo de época al año

¿cómo deberíamos hacerlo en c o C++?

En realidad tengo tiempo desde la época en cuestión de segundos y necesito para calcular la edad que dependen de ella.
Por lo tanto, la entrada será en segundos, ya que la época y la fecha de salida deberían ser según la fecha actual.

Gracias,
PP.

+1

¿entrada de datos de muestra y salida esperada? –

Respuesta

3

en C marcas de tiempo (es decir: segundo de época) se almacenan por lo general en time_t, mientras que las fechas humano-sabios se almacenan en la estructura tm. Necesita una función que convierta time_t s en tm s.

gmtime o localtime son dos funciones estándar de C que hacen su trabajo.

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

Advertencia de que estas funciones no son seguras para subprocesos. Usted encontrará una versión de reentrada en sistemas POSIX (Linux, Mac OS X, ...): gmtime_r y localtime_r

+1

Tenga en cuenta que el campo 'tm_year' está en años desde 1900, por lo que necesita agregar 1900 a ese campo para obtener el año real. –

5

Utilizando las funciones gmtime o localtime para convertir time_t en struct tm. Luego puede usar el campo tm_year de la estructura para obtener el año.

O para uso sin conexión, puede utilizar un convertidor web, like this.

Editar:

Código de ejemplo:

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

puede publicar código de muestra para esto, que ayudará más. Gracias. – User7723337

+4

Un convertidor web para uso * sin conexión *? –

+0

@Donal, fuera de línea como en una aplicación no :) –

0

En realidad tengo tiempo desde la época en cuestión de segundos y necesito para calcular la edad que dependen de ella. Por lo tanto, la entrada será en segundos, ya que la época y la fecha de salida deberían ser según la fecha actual.

No necesita el año, mes, día de cualquiera de las marcas de tiempo para esto. Reste las dos épocas de tiempos para obtener un valor en segundos. Dividir por 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; 
} 

Ésta será apagado por cualquier segundos intercalares que se han producido entre las dos marcas de tiempo, pero, significativamente, que le da el valor correcto dentro un año. Por ejemplo, del 1 de diciembre de 2010 al 1 de enero de 2011 es aproximadamente 1/12 de un año, no 1 año.

Cuestiones relacionadas