Trabajo con fechas en C# (.NET): herramientas integradas y bibliotecas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas en C# (.NET): herramientas integradas y bibliotecas populares



Trabajar con fechas y horas es una de las tareas clave en cualquier desarrollo serio. En el ecosistema de C# (.NET), existen tanto potentes tipos integrados (DateTime, DateTimeOffset, TimeSpan) como bibliotecas de terceros que simplifican operaciones complejas: manejo de husos horarios, representación legible para humanos, análisis de formatos no estándar. En este artículo, analizaremos en detalle las principales herramientas para trabajar con fechas en C#.



Tipos integrados de .NET



La clase base System.DateTime proporciona métodos para crear, comparar, realizar aritmética y formatear fechas. Admite un rango desde el 01.01.0001 hasta el 31.12.9999.



// Creación de fechaDateTime now = DateTime.Now;                // hora localDateTime utcNow = DateTime.UtcNow;          // UTCDateTime specific = new DateTime(2025, 3, 15, 14, 30, 0);

// AritméticaDateTime tomorrow = now.AddDays(1);TimeSpan diff = tomorrow - now;Console.WriteLine(diff.TotalHours); // 24

// Análisisstring dateStr = "2025-12-31";DateTime parsed = DateTime.Parse(dateStr, CultureInfo.InvariantCulture);

// FormateoConsole.WriteLine(now.ToString("dd.MM.yyyy HH:mm")); // 15.03.2025 14:30


DateTimeOffset es una versión mejorada que almacena el desplazamiento respecto a UTC. Se recomienda para aplicaciones que trabajan con diferentes husos horarios.



DateTimeOffset nowOffset = DateTimeOffset.Now;Console.WriteLine(nowOffset.Offset); // +03:00 (depende del sistema)


TimeSpan — para representar intervalos de tiempo. Ideal para medir la duración de operaciones.



TimeSpan duration = new TimeSpan(2, 15, 30); // 2 horas 15 minutos 30 segundosConsole.WriteLine(duration.TotalMinutes);     // 135.5


Biblioteca NodaTime



NodaTime es una biblioteca alternativa para trabajar con fechas y horas, creada por Jon Skeet (autor de libros sobre C#). Resuelve muchos problemas de DateTime, como la ambigüedad y la falta de tipado estricto en las zonas horarias.



Instalación mediante NuGet:

dotnet add package NodaTime


Tipos principales:

  • Instant — un momento en el tiempo (análogo a Unix timestamp)
  • LocalDateTime — fecha+hora sin vinculación a un huso horario
  • ZonedDateTime — fecha+hora en un huso horario específico
  • Duration y Period — intervalos (análogo a TimeSpan, pero Period considera unidades de calendario)


using NodaTime;

// Momento actual en UTCInstant now = SystemClock.Instance.GetCurrentInstant();Console.WriteLine(now.ToDateTimeUtc()); // se puede convertir a DateTime

// Trabajo con husos horariosDateTimeZone tz = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(tz);Console.WriteLine(moscowTime); // 2025-03-15T17:30:00 Europe/Moscow (+03)

// Period — diferencia en unidades de calendarioLocalDate start = new LocalDate(2024, 1, 1);LocalDate end = new LocalDate(2025, 3, 15);Period period = Period.Between(start, end);Console.WriteLine($"Pasaron {period.Years} años, {period.Months} meses, {period.Days} días");// Pasaron 1 años, 2 meses, 14 días


Ventajas de NodaTime: tipado estricto, manejo correcto de husos horarios históricos, soporte de calendarios (islámico, hebreo, etc.), sin ambigüedades en cambios de hora.



Biblioteca Humanizer



Humanizer es una biblioteca para "humanizar" datos, incluyendo fechas e intervalos. Permite mostrar fechas de forma legible: "ayer", "dentro de 3 horas", "hace 2 días".



Instalación:

dotnet add package Humanizer


Ejemplos de uso

Recommendations