Trabajo con fechas y horas en C#: de la A a la Z

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

Introducción: Por qué trabajar con fechas y horas en C# es fundamental para cualquier desarrollador

Cada desarrollador de C# tarde o temprano se enfrenta a la necesidad de procesar fechas y horas. Ya sea para el registro de eventos, el cálculo de plazos en una aplicación empresarial o simplemente mostrar la fecha actual en pantalla, no se puede prescindir de un dominio seguro de DateTime y TimeSpan. En este artículo, analizaremos todos los aspectos clave: desde la creación de objetos hasta el trabajo con zonas horarias y rendimiento. El material es adecuado tanto para principiantes como para programadores experimentados que deseen sistematizar sus conocimientos.



Tipos principales para trabajar con fecha y hora en .NET

En .NET existen varios tipos, cada uno de los cuales resuelve su propia tarea. Veamos los principales.



DateTime — la base fundamental

DateTime es una estructura que representa un momento en el tiempo (fecha y hora). Admite un rango desde el 01.01.0001 hasta el 31.12.9999. Se puede crear un objeto de varias maneras:

// Fecha y hora actualesDateTime now = DateTime.Now;// Fecha y hora actuales en UTCDateTime utcNow = DateTime.UtcNow;// Fecha específicaDateTime specificDate = new DateTime(2025, 3, 15);// Fecha y hora con precisión de segundosDateTime withTime = new DateTime(2025, 3, 15, 14, 30, 0);// Fecha de hoy (hora 00:00:00)DateTime today = DateTime.Today;


TimeSpan — intervalos de tiempo

TimeSpan representa un intervalo de tiempo (la diferencia entre dos fechas). Es útil para calcular la duración de operaciones:

// Creación de un intervaloTimeSpan interval = new TimeSpan(2, 5, 30); // 2 horas, 5 minutos, 30 segundos// Diferencia entre fechasDateTime start = DateTime.Now;System.Threading.Thread.Sleep(1000); // simulación de trabajoDateTime end = DateTime.Now;TimeSpan duration = end - start;Console.WriteLine($"Pasaron {duration.TotalSeconds} segundos");


DateTimeOffset — fecha con zona horaria

Para aplicaciones modernas que trabajan con usuarios de diferentes regiones, DateTimeOffset es fundamental. Almacena la fecha y la hora junto con el desplazamiento de UTC:

// Hora actual con desplazamiento localDateTimeOffset localOffset = DateTimeOffset.Now;// Hora con un desplazamiento específicoDateTimeOffset customOffset = new DateTimeOffset(2025, 3, 15, 12, 0, 0, TimeSpan.FromHours(3));// Conversión a UTCDateTime utc = localOffset.UtcDateTime;


Formato y análisis de fechas

La visualización correcta de las fechas al usuario y la lectura de datos desde cadenas son habilidades obligatorias.



Formato: ToString() y patrones personalizados

El método ToString() acepta una cadena de formato. Los formatos estándar más populares son:

  • "d" — fecha corta (15.03.2025)
  • "D" — fecha completa (15 de marzo de 2025)
  • "t" — hora corta (14:30)
  • "T" — hora completa (14:30:00)
  • "g" — formato general fecha/hora (15.03.2025 14:30)

Ejemplos de formato personalizado:

DateTime dt = new DateTime(2025, 3, 15, 14, 30, 45);Console.WriteLine(dt.ToString("yyyy-MM-dd")); // 2025-03-15Console.WriteLine(dt.ToString("dd.MM.yyyy HH:mm")); // 15.03.2025 14:30Console.WriteLine(dt.ToString("dddd, MMMM yyyy")); // sábado, marzo 2025 (depende de la cultura)


Análisis: conversión de cadena a fecha

Para un análisis confiable, use DateTime.TryParse o DateTime.ParseExact:

string dateString = "15.03.2025";if (DateTime.TryParse(dateString, out DateTime result)){    Console.WriteLine($"Éxito: {result}");}else{    Console.WriteLine("Error de análisis");}

// Análisis exacto con especificación de formatostring exactString = "2025-03-15 14:30:00";DateTime parsed = DateTime.ParseExact(exactString, "yyyy-MM-dd HH:mm

Blogs

Book Recommendations