Operaciones con DateTime y TimeSpan en C#
Aprende a usar DateTime y TimeSpan en C# para realizar operaciones de fecha y hora como comparación, cálculo y formateo.
En C#, las estructuras DateTime y TimeSpan se utilizan para trabajar con fechas y horas.
DateTime representa un momento específico, mientras que TimeSpan representa la diferencia entre dos fechas, es decir, un intervalo de tiempo.
Gracias a estas estructuras, se pueden realizar fácilmente comparaciones de fechas, adiciones/sustracciones y formateos.
¿Qué es DateTime?
La estructura DateTime representa una fecha y hora específicas.
DateTime ahora = DateTime.Now;
Console.WriteLine(ahora); // Fecha y hora actuales
Console.WriteLine(DateTime.UtcNow); // Hora universal
Propiedades básicas de DateTime
Es posible obtener la información de fecha y hora por separado:
DateTime fecha = new DateTime(2025, 9, 9, 14, 30, 0);
Console.WriteLine(fecha.Year); // 2025
Console.WriteLine(fecha.Month); // 9
Console.WriteLine(fecha.Day); // 9
Console.WriteLine(fecha.Hour); // 14
Console.WriteLine(fecha.Minute); // 30
Console.WriteLine(fecha.ToShortDateString()); // 9/9/2025
Console.WriteLine(fecha.ToLongDateString()); // martes, 9 de septiembre de 2025
Operaciones con DateTime
Los métodos Add permiten sumar o restar días, meses o años.
DateTime hoy = DateTime.Now;
Console.WriteLine(hoy.AddDays(5)); // 5 días después
Console.WriteLine(hoy.AddMonths(-1)); // 1 mes antes
DateTime futuro = hoy.AddYears(1);
Console.WriteLine(futuro); // 1 año después
// Diferencia entre dos fechas
DateTime nacimiento = new DateTime(2000, 1, 1);
TimeSpan diferencia = hoy - nacimiento;
Console.WriteLine($"Total de días: {diferencia.Days}");
¿Qué es TimeSpan?
TimeSpan representa un intervalo de tiempo.
TimeSpan duracion = new TimeSpan(2, 30, 0); // 2 horas 30 minutos
Console.WriteLine(duracion.TotalMinutes); // 150 minutos
Uso de DateTime y TimeSpan juntos
Podemos sumar un TimeSpan a un DateTime para crear una nueva fecha.
DateTime ahora = DateTime.Now;
TimeSpan tresHoras = new TimeSpan(3, 0, 0);
DateTime nuevaFecha = ahora + tresHoras;
Console.WriteLine(nuevaFecha);
Comparación de fechas
Las fechas se pueden comparar con >, <, == o con el método Compare.
DateTime f1 = new DateTime(2025, 1, 1);
DateTime f2 = new DateTime(2025, 12, 31);
Console.WriteLine(f1 < f2); // true
Console.WriteLine(DateTime.Compare(f1, f2)); // -1 (f1 es menor)
Comprobar si una fecha corresponde a un año o mes específico:
DateTime fecha = new DateTime(2025, 9, 9);
bool mismoAnio = (fecha.Year == 2025); // true
bool mismoMes = (fecha.Month == 9); // true
Formateo de fechas
El método ToString permite aplicar formatos personalizados.
DateTime ahora = DateTime.Now;
Console.WriteLine(ahora.ToString("dd.MM.yyyy")); // 09.09.2025
Console.WriteLine(ahora.ToString("dd.MM.yy")); // 09.09.25
Console.WriteLine(ahora.ToString("yyyy-MM-dd HH:mm")); // 2025-09-09 14:45
Ejemplo: Duración del proyecto y cálculo del coste diario
Console.Write("Ingrese la fecha de inicio del proyecto (yyyy-MM-dd): ");
DateTime inicio = DateTime.Parse(Console.ReadLine());
Console.Write("Ingrese la fecha de fin del proyecto (yyyy-MM-dd): ");
DateTime fin = DateTime.Parse(Console.ReadLine());
if (fin <= inicio)
{
Console.WriteLine("Error: la fecha de fin debe ser posterior a la fecha de inicio.");
}
else
{
Console.Write("Ingrese el precio total del proyecto: ");
decimal precio = decimal.Parse(Console.ReadLine());
TimeSpan duracion = fin - inicio;
int dias = duracion.Days;
decimal costeDiario = precio / dias;
Console.WriteLine($"Duración del proyecto: {dias} días");
Console.WriteLine($"Coste diario: {costeDiario:0.00} EUR");
}
TL;DR
DateTimerepresenta un momento,TimeSpanrepresenta un intervalo.NowyUtcNowdevuelven la hora actual.AddDays,AddMonths,AddYearspermiten manipular fechas.- La diferencia entre dos fechas se representa con un
TimeSpan. - Las comparaciones se pueden hacer con
>,<,==oCompare. ToStringpermite mostrar fechas en formatos personalizados.