[英]DateTime substracting days doesn't work
我正在使用以下代碼來減去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
。
對我來說,這永遠循環,即使我每次循環都減去1, currentWeek
始終保持不變(29)。
我已經在使用另一個帶有DateTime
和bool
Parameter的函數,該函數幾乎相同並且可以正常工作:
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);
}
}
有人可以向我解釋為什么上層代碼不起作用而下層代碼卻不能起作用嗎?
您必須分配結果值,DateTime是不可變的。
currentWeek = currentWeek.AddDays(-1);
關於第二個問題:
DayOfWeek
。 DateTime
是不可變的,因此您必須返回一個DateTime
實例,因為您無法對傳入的實例進行變異( 而不將其作為ref
傳遞 ) 代碼變更
private DateTime ErstenTagDerWocheAuswaehlen(DateTime date, bool anfangDerWoche = true)
{
System.DayOfWeek wochentagName;
int incrementor;
if(anfangDerWoche == true)
{
wochentagName = System.DayOfWeek.Monday;
incrementor = -1;
}
else
{
wochentagName = System.DayOfWeek.Friday;
incrementor = 1;
}
while(date.DayOfWeek != wochentagName)
{
date = date.AddDays(incrementor);
}
return date;
}
DateTime
是一個不可變的結構,因此您需要存儲從AddDays()
返回的值:
var t2 = currentWeek.AddDays(-1);
然后使用t2
。 對AddDays()
的調用實際上並沒有更改currentWeek
。
由於DateTime
是不可變的,因此在使用AddDays
它將返回具有新信息的新DateTime
結構,並且不會更改給定的結構。 方法文檔指出:
返回一個新的System.DateTime,它將指定的天數添加到此實例的值。
您必須將其分配給變量:
currentWeek = currentWeek.AddDays(-1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.