Diferencia entre 2 fechas con C (tiempo transcurrido)

En el tutorial de hoy vamos a trabajar con C y marcas de tiempo o timestamps para obtener la diferencia entre una fecha y hora y otra.

Te mostraré ejemplos para saber la diferencia que hay entre un timestamp y otro, logrando así calcular el tiempo transcurrido entre 2 marcas de tiempo.

Por otro lado veremos cómo formatear el tiempo transcurrido en C y obtener la diferencia en horas, minutos y segundos.

Obteniendo timestamp actual

Para obtener la marca de tiempo actual con C podemos invocar a time pasándole NULL como argumento.

Eso devolverá los segundos transcurridos desde la fecha Unix hasta el día de hoy con precisión de segundos. Por ejemplo, si lo invoco al momento de escribir este post, la salida es: 1647395704

Lo que tenemos que hacer para saber la diferencia de tiempos en C es guardar el inicio y luego calcular la diferencia con el final, invocando a la misma función.

Formatear tiempo transcurrido entre 2 fechas con C

Veamos un ejemplo que formatea la diferencia entre 2 marcas de tiempo con C. Básicamente indica cuánto tiempo pasó, tomando en cuenta los segundos de diferencia:

Recuerda que tenemos segundos, así que para convertirlos a horas los dividimos entre 60 y luego entre 60 (o dividir entre 3600).

Para convertirlos a minutos los dividimos entre 60, y luego de restar horas y minutos ya solo quedarán segundos.

Diferencia entre dos fechas con C

Ya vimos la función, ahora veamos cómo sacar la diferencia. Solo es cuestión de obtener el timestamp en el inicio y en el final:

Cabe aclarar que podríamos hacer esto en cualquier otro lugar, por ejemplo, medir la ejecución del programa, el tiempo en el que el usuario resuelve cierta cosa, etcétera.

Bonus: convertir timestamp a fecha

Hasta ahora he hablado de “fechas” pero solo hemos visto timestamps. Pues bien, podemos convertir esta marca de tiempo a cualquier fecha con hora.

Para esto podemos invocar a strftime o usar una función manual. La solución correcta es strftime pero yo te mostraré cómo usar todos los campos de un localtime para imprimirlos por separado:

Aquí lo interesante es que podemos acceder al día, mes (contando desde 0), años transcurridos desde 1900 (así es la especificación, yo tampoco sé por qué se hace así), la hora, minutos y segundos.

Recuerda que el formato %02d imprimirá un entero agregando un cero a la izquierda en caso de que el mismo tenga menos de dos dígitos.

Poniendo todo junto

Tiempo transcurrido entre 2 fechas con ANSI C usando time y marcas de tiempo
Tiempo transcurrido entre 2 fechas con ANSI C usando time y marcas de tiempo

El código final para mostrar la diferencia entre 2 fechas con C queda como se ve a continuación. Recuerda que es un ejemplo simple que puedes adaptar a tus necesidades:

Para terminar te dejo con más tutoriales de lenguaje C en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario