簡體   English   中英

DateTime減去天數不起作用

[英]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)。

我已經在使用另一個帶有DateTimebool 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);

關於第二個問題:

  1. 將枚舉用於星期幾,請勿嘗試將星期幾轉換為字符串進行比較。 類型是DayOfWeek
  2. 同樣, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM