DateTime减去天数不起作用

时间:2017-06-29 17:59:32

标签: c# datetime

我使用以下代码来减去DateTime的一天,直到我到达星期一:

DateTime currentWeek = new DateTime(beginDate.Year, beginDate.Month, beginDate.Day);                
while (currentWeek.DayOfWeek.ToString() != "Monday")
{
    currentWeek.AddDays(-1);
    MessageBox.Show(currentWeek.Day.ToString());
    MessageBox.Show(currentWeek.DayOfWeek.ToString());
}

beginDate是第一次设置为当前日期DateTime.Now

对我来说,这永远循环,currentWeek的日子始终保持不变(29),即使我每次循环都减去1。

我已经在使用另一个带有DateTimebool参数的函数,它几乎完全相同且有效:

private void ErstenTagDerWocheAuswaehlen(DateTime date, bool anfangDerWoche = true)
{
    string wochentagName;
    int incrementor;
    if(anfangDerWoche == true)
    {
        wochentagName = "Monday";
        incrementor = -1;
    }
    else
    {
        wochentagName = "Friday";
        incrementor = 1;
    }

    while(date.DayOfWeek.ToString() != wochentagName)
    {                
        date = date.AddDays(incrementor);
    }
}                

有人可以向我解释为什么上面的代码不起作用而下面的代码不起作用吗?

3 个答案:

答案 0 :(得分:4)

您必须分配结果值,DateTime是不可变的。

currentWeek = currentWeek.AddDays(-1);

关于你的第二个问题:

  1. 使用enum表示星期几,不要尝试将星期几转换为字符串进行比较。类型为DayOfWeek
  2. 同样,DateTime不可变,因此您必须返回一个DateTime实例,因为您无法改变传入的实例(而不会将其作为{{ 1}}
  3. 代码更改

    ref

答案 1 :(得分:2)

DateTime是一个不可变的结构,因此您需要存储从AddDays()返回的值:

var t2 = currentWeek.AddDays(-1);

然后使用t2。拨打AddDays()的电话实际上并没有改变currentWeek

答案 2 :(得分:2)

由于DateTime是不可变的,因此在使用AddDays时,它会返回带有新信息的新DateTime结构,并且不会更改给定的结构。 方法文档说明:

  

返回一个新的System.DateTime,它将指定的天数添加到此实例的值。

您必须将其分配给变量:

currentWeek = currentWeek.AddDays(-1);