Hora y fecha

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.

variable_hora_fecha_nota

variable_timePuede 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::

variable_envtime_listadoSi ejecutamos el programa (después de haberlo compilado), mostrará el valor de la hora en bajo nivel cada dos segundos durante 20 segundos:

variable_time_resultadoEl 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.

variable_time1El programa se detiene durante dos segundos

variable_time2y repite la llamada time nuevamente,

variable_time1hasta un total de diez veces.

variable_time3Usar 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:

variable_difftimeLa 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.

atras

 

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.