A veces, puede resultar útil para un programa poder determinar la hora y la fecha. Puede querer registrar cuanto tiempo se está ejecutando, o puede querer modificar el modo de comportamiento en ciertos momentos. Por ejemplo, un juego puede dejar de funcionar durante las horas de trabajo, o es posible que la copia de seguridad de un programa de planificación desee esperar hasta primera hora antes de realizar una copia automática.
Todos los sistemas UNIX usan el mismo punto de partida para las horas y las fechas: las 12 de la noche GMT de 1 de enero de 1970.Ese momento se conoce como «inicio de la época UNIX«, y Linux no iba a ser menos. Desde entonces, el tiempo en todos los sistemas Linux se mide en segundos. MS-DOS gestiona los tiempos de un modo similar, pero la época MS-DOS comenzó en 1980. Otros sistemas usan otras épocas de inicio.
Las horas se gestionan mediante un tipo definido, time_t
. Es un tipo entero pensado para ser lo suficientemente largo para contener fechas y horas en segundos. En los sistemas Linux, es un entero long
y se define, junto con las funciones para manipular los valores de las horas, en el archivo de cabecera time.h
.
Puede encontrar el valor de hora de bajo nivel mediante la función time
, que envía el número de segundos desde el inicio de la época. También escribirá el valor enviado en la ubicación que señale tloc
, si no se trata de un indicador nulo.
En este ejemplo mostrará como funciona la función time con este sencillo programa, envtime.c
::
Si ejecutamos el programa (después de haberlo compilado), mostrará el valor de la hora en bajo nivel cada dos segundos durante 20 segundos:
El programa llama a time con un argumento de indicador nulo, que envía la hora y la fecha a modo de número en segundos.
El programa se detiene durante dos segundos
y repite la llamada time
nuevamente,
Usar la hora y la fecha como un número de segundos desde el principio de 1970 puede ser útil para medir cuánto tardan en suceder las cosas. Podría sustraer únicamente los valores que obtuvo de dos llamadas a time. Sin embargo, el comité estándar ESIO/ANSI C no especificó que el tipo time_t
se usase para medir los intervalos de tiempo arbitrarios en segundos entre dos valores time_t
y lo retornará como double
:
La función difftime calcula la diferencia entre dos valores de hora y envía un valor equivalente a time1-time2
a modo de número en coma flotante. En Linux, el valor de retorno de time
es un número en segundos que puede ser manipulado, pero para conseguir una portabilidad total debería usar defftime
.
Para presentar la hora y la fecha de un modo más comprensible (para los humanos), tiene que convertir el valor horario en una hora y una fecha reconocible. Existen funciones estándar que ayudan a conseguirlo.
Debe estar conectado para enviar un comentario.