C#Intermedio6 oct 2025
El caso del DateTime que no suma como esperabas
snippet.c#
using System;
class Program {
static void Main() {
DateTime fecha = new DateTime(2023, 1, 31);
DateTime resultado = fecha.AddMonths(1);
Console.WriteLine(resultado.ToString("yyyy-MM-dd"));
}
}¿Qué crees que imprime?
✅ Salida Esperada
2023-02-28⚠️ Salida Real
2023-03-03¿Por qué pasa esto?
**¡C# tiene un sentido del humor muy particular con las fechas!** 😅
Cuando sumas un mes al 31 de enero, .NET no te da el 28 de febrero como esperarías. En su lugar:
- **AddMonths** intenta mantener el mismo día del mes (día 31)
- Pero febrero solo tiene 28 días (o 29 en bisiesto)
- En lugar de ajustar al último día válido, **rebota al mes siguiente**
- Resultado: 31 de enero + 1 mes = 3 de marzo 🤯
**¿Por qué?** El método está diseñado para "preservar" el día original, incluso si eso significa saltar meses. ¡Usa `DateTime.DaysInMonth` para cálculos seguros!
Conceptos relacionados
datetimeedge-caseapi-design