我使用以下代码来减去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。
我已经在使用另一个带有DateTime
和bool
参数的函数,它几乎完全相同且有效:
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);
}
}
有人可以向我解释为什么上面的代码不起作用而下面的代码不起作用吗?
答案 0 :(得分:4)
您必须分配结果值,DateTime是不可变的。
currentWeek = currentWeek.AddDays(-1);
关于你的第二个问题:
DayOfWeek
。DateTime
不可变,因此您必须返回一个DateTime
实例,因为您无法改变传入的实例(而不会将其作为{{ 1}} )代码更改
ref
答案 1 :(得分:2)
DateTime
是一个不可变的结构,因此您需要存储从AddDays()
返回的值:
var t2 = currentWeek.AddDays(-1);
然后使用t2
。拨打AddDays()
的电话实际上并没有改变currentWeek
。
答案 2 :(得分:2)
由于DateTime
是不可变的,因此在使用AddDays
时,它会返回带有新信息的新DateTime
结构,并且不会更改给定的结构。
方法文档说明:
返回一个新的System.DateTime,它将指定的天数添加到此实例的值。
您必须将其分配给变量:
currentWeek = currentWeek.AddDays(-1);