Trabajo con fechas en C# (.NET): revisión de bibliotecas y herramientas

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): revisión completa de bibliotecas y herramientas integradas



El manejo de fechas y horas es una de las tareas más comunes en el desarrollo. En el ecosistema C# (.NET) existe tanto una potente funcionalidad integrada (System.DateTime) como bibliotecas de terceros que simplifican escenarios complejos: trabajo con zonas horarias, formato, intervalos y análisis sintáctico. En este artículo analizaremos las herramientas principales, incluyendo las capacidades modernas de .NET 6+ y los paquetes NuGet populares.



1. Herramientas integradas: DateTime, DateOnly, TimeOnly



La clase base System.DateTime está disponible desde las primeras versiones de .NET. Soporta:

  • Creación de fechas: new DateTime(2025, 3, 15)
  • Aritmética: date.AddDays(10), date.AddMonths(-1)
  • Comparación: date1 > date2
  • Formato: date.ToString("yyyy-MM-dd")


A partir de .NET 6, aparecieron los tipos DateOnly y TimeOnly — no están vinculados a una zona horaria y almacenan solo la fecha o solo la hora. Esto es útil para cumpleaños, horarios de trabajo y agendas.



using System;

DateOnly birthday = new DateOnly(1990, 5, 20);TimeOnly alarm = new TimeOnly(7, 30);

Console.WriteLine($"Fecha: {birthday}, Hora: {alarm}");// Salida: Fecha: 20.05.1990, Hora: 07:30


2. TimeSpan — intervalos de tiempo



Para trabajar con intervalos de tiempo se utiliza TimeSpan. Permite calcular la diferencia entre fechas, la duración de operaciones y tiempos de espera.



DateTime start = DateTime.Now;// ... ejecución del código ...DateTime end = DateTime.Now;

TimeSpan elapsed = end - start;Console.WriteLine($"Transcurrido: {elapsed.TotalSeconds} seg.");


3. Noda Time — trabajo avanzado con fechas



Noda Time (NuGet: NodaTime) es una biblioteca de Jon Skeet (autor de un libro popular sobre C#). Resuelve los problemas de DateTime:

  • Separación clara entre "instante en el tiempo" (Instant), "fecha en el calendario" (LocalDate) y "hora con zona horaria" (ZonedDateTime).
  • Soporte de calendarios (islámico, hebreo, japonés).
  • Inmutabilidad de todos los tipos.
  • Manejo correcto de zonas horarias a través de la base de datos IANA (tzdata).


using NodaTime;

Instant now = SystemClock.Instance.GetCurrentInstant();DateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];ZonedDateTime moscowTime = now.InZone(zone);

Console.WriteLine($"Hora actual en Moscú: {moscowTime:yyyy-MM-dd HH:mm}");

// Trabajo con LocalDateLocalDate today = LocalDate.FromDateTime(DateTime.Today);LocalDate nextWeek = today.PlusDays(7);


Noda Time es especialmente útil en proyectos donde la precisión de las zonas horarias es crítica (registros, reservas, sistemas internacionales).



4. Humanizer — fechas legibles para humanos



Humanizer (NuGet: Humanizer.Core) es una biblioteca para convertir números, fechas y horas a lenguaje natural. Puede:

  • Mostrar tiempo relativo: "hace 3 minutos", "dentro de 2 días".
  • Declinar nombres de meses y días de la semana.
  • Formatear intervalos de tiempo: "1 hora 30 minutos".


using Humanizer;

DateTime pastDate = DateTime.UtcNow.AddHours(-5);Console.WriteLine(pastDate.Humanize()); // "hace 5 horas"

TimeSpan span = new TimeSpan(2, 45, 0);Console.WriteLine(span.Humanize()); // "2 horas 45 minutos"


Humanizer soporta localización (idioma ruso — Humanizer.Core.ru).



5. FluentDateTime — interfaz fluida para DateTime



FluentDateTime (NuGet: FluentDateTime) — agrega métodos de extensión para una

Recommendations