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

C# 遍历日期列表并将月份修改为当前下一月的实现问题

解决方案

C# 中的 DateTime 是不可变值类型,无法直接修改其 Month 属性,你可以通过重新构造 DateTime 实例的方式仅替换月份,同时保留原日期的日、时分秒等信息。

核心逻辑说明

  1. 先计算当前时间的下一月对应的月份和年份,处理12月翻年的场景
  2. 构造新日期时,额外判断原日期的日是否超过目标月的最大天数,避免出现类似「4月31日」的非法日期报错
  3. 修正原有代码中循环遗漏最后一个元素的小问题

修改后完整代码

DataSet dslsip = mAE_Repo.FetchLastDayCustEmailsEquity_SIP_Content();
var ressip = (from r in dslsip.Tables[0].AsEnumerable() select r.Field<string>("emailid")).ToList();
var resdate = (from r in dslsip.Tables[0].AsEnumerable() select r.Field<DateTime>("a_confirmdatetime")).ToList();

// 预先计算目标年月,避免循环内重复计算
DateTime now = DateTime.Now;
int targetMonth = now.Month + 1;
int targetYear = now.Year;
if (targetMonth > 12)
{
    targetMonth = 1;
    targetYear += 1;
}

if (resdate != null && resdate.Count > 0)
{
    // 修正原循环条件:原写法i < resdate.Count()-1会漏掉最后一个元素
    for (int i = 0; i < resdate.Count; i++)
    {
        DateTime originalDate = resdate[i];
        if (originalDate.Month <= now.Month)
        {
            // 处理日数超过目标月最大天数的场景
            int targetDay = Math.Min(originalDate.Day, DateTime.DaysInMonth(targetYear, targetMonth));
            // 构造新日期,保留原日期的时分秒
            DateTime adjustedDate = new DateTime(
                targetYear, 
                targetMonth, 
                targetDay,
                originalDate.Hour, 
                originalDate.Minute, 
                originalDate.Second, 
                originalDate.Millisecond
            );
            // 替换原列表中的日期,后续写你自己的业务逻辑即可
            resdate[i] = adjustedDate;
        } 
    }
}

效果示例

如你给出的示例:原日期为 2021-07-05 00:00:00,当前月份为9月,调整后日期为 2021-10-05 00:00:00,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:57:03