Poesía Binaria

Obtener la fecha y hora formateada en C

Es un código muy simple, aunque tal vez si estáis empezando os resulte muy útil para que vuestros programas sean capaces de decir la hora o hacer alguna operación con la fecha

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <time.h>
#include <stdio.h>

int main()
{
  time_t t;
  struct tm *tm;
  char fechayhora[100];

  t=time(NULL);
  tm=localtime(&t);
  strftime(fechayhora, 100, "%d/%m/%Y", tm);
  printf ("Hoy es: %s\n", fechayhora);
}

La forma de utilizar strftime() es pasando los siguientes parámetros:

Bueno, no todo queda ahí, podemos sacar la información directamente del (struct tm*), por ejemplo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <time.h>
#include <stdio.h>

int main()
{
  time_t t;
  struct tm *tm;
  char fechayhora[100];

  t=time(NULL);
  tm=localtime(&t);
  printf ("Hoy es: %02d/%02d/%d\n", tm->tm_mday, tm->tm_mon, 1900+tm->tm_year);
}

Es lo mismo de antes, pero con algunos detalles, por ejemplo el año, cuenta el número de años desde 1900, por lo que si queremos el año completo debemos sumar 1900 como en el ejemplo. Podemos ver la estructura struct tm aquí:

struct tm {
int tm_sec; /* segundos */
int tm_min; /* minutos */
int tm_hour; /* horas */
int tm_mday; /* día del mes */
int tm_mon; /* mes */
int tm_year; /* año */
int tm_wday; /* día de la semana */
int tm_yday; /* día del año */
int tm_isdst; /* cambio horario verano/invierno */
};
Fuente: man localtime

Aunque extraer estos valores directamente de struct tm puede ser incómodo, nos sirve para analizar los datos por separado y obtenerlos como valores enteros, por ejemplo para hacer cálculos. Un buen ejercicio es intentar traducir los nombres de los meses y día de la semana (aunque strftime(), comentada anteriormente es capaz de devolver esta información en el idioma del sistema, en ocasiones el idioma de nuestra aplicación no tiene por qué coincidir), podemos hacer lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <time.h>
#include <stdio.h>

int main()
{
  time_t t;
  struct tm *tm;
  char fechayhora[100];
  char *meses[12]={"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};

  t=time(NULL);
  tm=localtime(&t);
  printf ("Hoy es: %02d/%s/%d\n", tm->tm_mday, meses[tm->tm_mon], 1900+tm->tm_year);
}

También podría interesarte....