Cargando...

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

  • DateTime representa un momento, TimeSpan representa un intervalo.
  • Now y UtcNow devuelven la hora actual.
  • AddDays, AddMonths, AddYears permiten manipular fechas.
  • La diferencia entre dos fechas se representa con un TimeSpan.
  • Las comparaciones se pueden hacer con >, <, == o Compare.
  • ToString permite mostrar fechas en formatos personalizados.