You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理到达12月时触发的System.ArgumentOutOfRangeException异常?

问题说明

代码意图是获取下一个月的所有日期并格式化为德语格式,但执行时会抛出System.ArgumentOutOfRangeException异常:

DateTime startOfMonth = new DateTime(startTime.Year, startTime.Month+1, 1);

原因是当startTime为12月时,startTime.Month+1等于13,超出了月份的合法范围(1-12),且未自动处理年份进位。

解决方案

不要手动计算月份和年份,直接使用DateTime.AddMonths()方法,它会自动处理年份进位逻辑(12月加1个月自动跳转到下一年1月),同时修正月份天数的获取逻辑,确保取的是下一个月的天数。

修改后的完整代码:

public static List<string> GetMonthDays()
{
    DateTime startTime = DateTime.Now;
    // 直接用AddMonths获取下一个月的第一天,自动处理年份进位
    DateTime startOfMonth = startTime.AddMonths(1).Date;
    // 获取下一个月的总天数
    int daysInMonth = DateTime.DaysInMonth(startOfMonth.Year, startOfMonth.Month);
    List<string> nextMonthDays = new List<string>();
    // 把CultureInfo创建移到循环外,避免重复实例化
    CultureInfo germanCulture = new CultureInfo("de-DE");
    
    for (int i = 0; i < daysInMonth; ++i)
    {
        DateTime currentDate = startOfMonth.AddDays(i);
        nextMonthDays.Add(currentDate.ToString("dddd - dd.MM.yy", germanCulture));
    }
    return nextMonthDays;
}
关键修改点
  • 自动处理月份进位:用startTime.AddMonths(1)替代手动Month+1,12月调用后会自动生成下一年1月的日期,完全规避非法月份的问题。
  • 修正天数获取:原代码错误地取了当前月的天数,现在改为取下一个月(startOfMonth)的年份和月份来计算天数,确保天数准确。
  • 性能优化:将CultureInfo的实例化移到循环外部,避免每次循环都创建新对象,提升执行效率。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:26:27