Para obtener la fecha y hora actual de acuerdo con el tiempo local en C necesitaremos tres funciones, time, localtime y strftime. La primera, time, recibirá como parámetro un puntero nulo (es decir, NULL o 0) y devolverá el tiempo actual en una variable de tipo "time_t".
A continuación averiguaremos el tiempo local con la función localtime que recibe por parámetro un puntero a una variable time_t. Esta función devuelve un puntero hacia una estructura de tipo tm, que es la que utilizaremos en strftime.
Por último, la función strftime formatea una estructura de tipo tm a un formato legible por cualquier persona. El primer parámetro es una cadena, el segundo la longitud de esta cadena, el tercero la cadena de formateo y por último la estructura que contiene el tiempo que queremos formatear. En la siguiente tabla puedes ver los códigos de formateo de fechas con strftime.
%a | Es reemplazado por la abreviatura del nombre del día de la semana de la localidad |
%A | Es reemplazado por el nombre completo del día de la semana de la localidad |
%b | Es reemplazado por la abreviatura del nombre del mes de la localidad |
%B | Es reemplazado por el nombre completo del mes de la localidad |
%c | Es reemplazado por la fecha apropiada y la representación de la hora de la localidad |
%d | Es reemplazado por el día del mes como un número decimal (01-31) |
%H | Es reemplazado por la hora (reloj de 24 horas) como un número decimal (00-23) |
%I | Es reemplazado por la hora (reloj de 12 horas) como un número decimal (01-12) |
%j | Es reemplazado por el día del año como un número decimal (001-366) |
%m | Es reemplazado por el mes como un número decimal (01-12) |
%M | Es reemplazado por el minuto como un número decimal (00-59) |
%p | Es reemplazado por el equivalente de la localidad de las designaciones de AM/PM asociadas con un reloj de 12 horas |
%S | Es reemplazado por el segundo como un número decimal (00-61) |
%U | Es reemplazado por el número de la semana del año (el primer Domingo como el primer día de la semana 1) como un número decimal (00-53) |
%w | Es reemplazado por el día de la semana como un número decimal (0-6), donde Domingo es 0 |
%W | Es reemplazado por el número de la semana del año (el primer Lunes como el primer día de la semana 1) como un número decimal (00-53) |
%x | Es reemplazado por la representación apropiada de la fecha de la localidad |
%X | Es reemplazado por la representación apropiada de la hora de la localidad |
%y | Es reemplazado por el año sin siglo como un número decimal (00-99) |
%Y | Es reemplazado por el año con siglo como un número decimal |
%Z | Es reemplazado por el nombre o la abreviatura del huso horario, o por ningunos caracteres si ningún huso horario es determinable |
%% | Es reemplazado por % |
Seguidamente un ejemplo para imprimir la fecha y hora actuales:
#include <stdio.h> #include <time.h> int main(int argc,char* argv[]) { time_t tiempo = time(0); struct tm *tlocal = localtime(&tiempo); char output[128]; strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal); printf("%s\n",output); return 0; }
Esto imprimirá 12/05/06 14:13:01 (suponiendo que esta es la hora actual).
Redactado por Nenillo