C – Obtener y formatear fecha actual

Fecha actual en ANSI C

En este post te voy a mostrar a obtener la fecha actual en C, además de formatearla (para extraer el año, mes, día, etcétera). Las funciones que vamos a ver son: time, localtime y strftime.

Con la función time obtenemos el tiempo (como entero) actual. Usando localtime obtenemos un struct de tipo tm, necesario para más tarde formatear la fecha con strftime.

Aunque suena complicado al inicio, la verdad es que es muy sencillo.

Obtener fecha actual en C

Veamos el siguiente ejemplo de código que muestra la fecha en formato YYYY-MM-DD HH:MM:SS

Primero obtenemos el tiempo actual usando la función time; almacenamos el valor dentro de la variable t.

Más tarde, creamos una variable de tipo tm la cual será el resultado de llamar a localtime pasándole la variable t antes mencionada.

Eso es todo lo que necesitas para obtener la fecha actual en ANSI C. A continuación detallaré el uso de las funciones.

Por cierto, la salida es la siguiente:

Obtener fecha actual en C – Compilación y salida del programa

Si quieres compilarlo recuerda instalar el compilador en Windows o Android, aunque igual puedes ejecutarlo en línea (en el servidor que aloja el código la hora varía debido a la ubicación).

Vamos a la explicación. Sordid details following…

Struct de tipo tm

El tipo tm tiene muchos campos que de hecho ya podríamos usar para obtener los detalles de la fecha como el año, mes o día.

Por ejemplo, para los segundos actuales podríamos acceder a tiempoLocal.tm_sec.

Los campos que tiene (todos enteros) son:

  • tm_sec
  • tm_min
  • tm_hour
  • tm_mday
  • tm_mon
  • tm_year
  • tm_wday
  • tm_yday
  • tm_isdst

Puedes ver una descripción más detallada de esos campos en este enlace.

Como sería un poco complejo usar el struct de tm, mejor usamos strftime que formatea una fecha.

Explicación de strftime

La función strftime necesita un formato como cadena, dicho formato está compuesto de letras que tienen un significado.

De esta forma, %Y-%m-%d %H:%M:%S; se convierte en 2019-07-31 16:36:48.

Cada letra representa un dato que se quiere obtener de la fecha y se usa el signo de porcentaje para indicar que el mismo debe ser remplazado por el valor de la fecha actual.

Por ejemplo:

  • %Y – El año
  • %m – El mes
  • %d – El día
  • %H – La hora en formato de 24 horas
  • %M – Los minutos
  • %S – Los segundos

Hay más formatos que puedes ver aquí.

Si se coloca una letra o carácter que no tiene uso específico, el mismo es ignorado (se puede ver en los dos puntos y en los guiones)

La función strftime toma argumentos en el siguiente orden:

  1. El búfer en donde va a escribir la fecha formateada (debe ser lo suficientemente largo para evitar desbordamientos)
  2. La cantidad de bytes que debe escribir (por eso le pasamos el tamaño, sizeof, del búfer)
  3. El formato, que indica cómo formatear la fecha
  4. La dirección de memoria, o “el apuntador” a la variable del tiempo local

La función strftime en C devuelve el número de bytes que escribió dentro del búfer indicado; pero si hubo un error (por ejemplo, un mal formato de fecha) entonces devuelve 0.

Ese resultado se utiliza para comprobar si el formateo fue correcto, y de esta manera finalmente tenemos la fecha formateada dentro del búfer.

Conclusión

Así de simple se obtiene la fecha y hora actual en C.

Con la función strftime puedes obtener la fecha que quieras, aprendiendo sobre los formateadores y su uso.

Lo sé, yo también creo que es mucho código, pero así es C.

C – Obtener y formatear fecha actual

Por parzibyte Tiempo de lectura: 3 min
0