Blog de conocimiento gratuito: linux, programación, open source, bases de datos, android, frameworks, web e informática en general.
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.
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:
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…
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:
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.
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 segundosHay 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:
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.
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.