programacion-tipos-tiempo

Tipos de tiempo

Los tipos de variable temporales son los tipos relacionados con la medición del tiempo, en sus distintas vertientes.

De forma similar a como ocurría con los textos, el tiempo es algo que “como personitas” estamos acostumbrados a usar de forma habitual, prácticamente todos los días.

Ejemplos de medición del tiempo es quedar a una hora determinada, una fecha de nacimiento, o el tiempo que ha trascurrido entre dos determinados momentos.

Sin embargo, un ordenador “no entiende” nada del paso de tiempo, únicamente entiende de números. Así que hemos tenido que inventar formas de representar y medir el paso del tiempo.

Los tipos de tiempo que vamos a encontrar con más frecuencia son,

  • Fechas, para representar fechas sin incluir información sobre la hora del día. Este tipo de dato generalmente incluye componentes como el día, el mes y el año
  • Horas, para representar la hora del día sin tener en cuenta la fecha
  • DateTime (fecha y hora), con frecuencia los dos anteriores se combinan en un único tipo, que combina tanto la fecha como la hora
  • Intervalo de tiempo, se utiliza para representar un intervalo de tiempo, o duración. Por ejemplo, suele ser el resultado de calcular la diferencia entre dos fechas o horas

La existencia de uno y otro tipo depende de cada lenguaje de programación. Algunos pueden implementar todos, o omitir alguno. Pero en general, estos son los tipos que vamos a encontrar con mayor frecuencia.

Ejemplo de tipos de variables de tiempo en diferentes lenguajes

Vamos a ver algunos ejemplos de cómo se emplean estos tipos en distintos lenguajes de programación.

Por ejemplo, C# dispone del tipo DateTime para fechas y horas, y TimeSpanpara intervalos de tiempo. Su uso sería el siguiente.

// ejemplo DateTime
DateTime fechaInicio = new DateTime(2023, 6, 1, 12, 0, 0);
DateTime fechaFin = new DateTime(2023, 6, 1, 14, 30, 0);

// ejemplo TimeSpan
TimeSpan duracion = fechaFin - fechaInicio;

Console.WriteLine(duracion); // Output: 02:30:00

El código en Java sería muy similar. Aquí disponemos del tipo Date, LocalDateTime para fechas y horas, y el tipo Duration para intervalos de tiempo.

// ejemplo LocalDateTime
LocalDateTime fechaInicio = LocalDateTime.of(2023, 6, 1, 12, 0, 0);
LocalDateTime fechaFin = LocalDateTime.of(2023, 6, 1, 14, 30, 0);

// ejemplo Duration
Duration duracion = Duration.between(fechaInicio, fechaFin);

En el caso de C++ tendremos que apoyarnos en librerías como ctime o chronos para gestionar tipos de tiempo. La sintaxis va a ser un poco horrible, pero sería algo como lo siguiente.

#include <chrono>

// ejemplo de std::chrono::system_clock
auto fechaInicio = std::chrono::system_clock::from_time_t(std::mktime(&std::tm{0, 0, 12, 1, 5, 123}));
auto fechaFin = std::chrono::system_clock::from_time_t(std::mktime(&std::tm{0, 30, 14, 1, 5, 123}));

// ejemplo de std::chrono::duration
std::chrono::duration<double> duracion = fechaFin - fechaInicio;

En el caso de JavaScript todas las operaciones relacionadas con el tiempo se realizan mediante el objeto Date.

let fechaInicio = new Date(2023, 5, 1, 12, 0, 0);
let fechaFin = new Date(2023, 5, 1, 14, 30, 0);

let duracion = fechaFin - fechaInicio;

Mientras que en Python usaremos el objeto datetime que deberemos importar previamente.

from datetime import datetime

fechaInicio = datetime(2023, 6, 1, 12, 0, 0)
fechaFin = datetime(2023, 6, 1, 14, 30, 0)

duracion = fechaFin - fechaInicio

Por poner un ejemplo de lenguaje que diferencia entre Date, Time y DateTime, por ejemplo, en SQL tenemos una pletora de tipos de variables de tiempo.

-- Ejemplo de uso de parámetros con tipos de fecha y hora
DECLARE @fechaParam DATE;
DECLARE @horaParam TIME;
DECLARE @fechaHoraParam DATETIME;

-- Asignar valores a los parámetros
SET @fechaParam = '2023-06-01';
SET @horaParam = '14:30:00';
SET @fechaHoraParam = '2023-06-01 14:30:00';

Como vemos, más o menos los tipos relacionados con el tiempo son similares en los distintos lenguajes de programación. Algunos distinguen entre Date y Time, aunque frecuentemente se combinan en un tipo DateTime.

Por otro lado, para las operaciones con tiempos, algunos lenguajes tienen tipos específicos, como TimeSpan en C# o Duration en Java. Mientras que otros lenguajes “se apañan” con DateTime para todo.

Además, algunos lenguajes incorporan ciertas funcionalidades de forma nativa. Mientras que en otros tendremos que apoyarnos en librerías y módulos adicionales.

La sintaxis y la forma de crear y manipular objetos de tiempo pueden variar entre los lenguajes, Cada lenguaje puede tener peculiaridades en el manejo de formatos de fecha y hora, así como en las funciones específicas disponibles.

Pero los conceptos subyacentes son similares. Todos los lenguajes proporcionan funciones y métodos para realizar operaciones comunes en fechas y tiempos, como comparar, sumar o restar intervalos de tiempo.