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.
/*
Obtener y formatear fecha actual
en C
https://parzibyte.me/blog
*/#include <stdio.h>
#include <time.h>
int main(void) {
// Tiempo actual
time_t t = time(NULL);
struct tm tiempoLocal = *localtime(&t);
// El lugar en donde se pondrá la fecha y hora formateadas
char fechaHora[70];
// El formato. Mira más en https://en.cppreference.com/w/c/chrono/strftime
char *formato = "%Y-%m-%d %H:%M:%S";
// Intentar formatear
int bytesEscritos =
strftime(fechaHora, sizeof fechaHora, formato, &tiempoLocal);
if (bytesEscritos != 0) {
// Si no hay error, los bytesEscritos no son 0
printf("Fecha y hora: %s", fechaHora);
} else {
printf("Error formateando fecha");
}
}
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.
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.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.