2016-07-06 325 views
-1

有人可以解釋我爲什麼這樣做:設置日期時間爲23:59:59

 public virtual ActionResult RecupererVehicules([DataSourceRequest] DataSourceRequest request, String dateMin, String dateMax) 
    { 
     // Création des dates 
     DateTime min = DateTime.Parse(dateMin); 
     DateTime max = DateTime.Parse(dateMax); 
     max.AddHours(23).AddMinutes(59).AddSeconds(59); 

     return Json(Models.Vehicule.getVehiculesDates(min,max)); 
    } 

找我:

dateMin 「2016年6月26日」
dateMax「2016 -07-06「
分鐘{26/06/2016 00:00:00}
max {2016/07/06 00:00:00} < - 爲什麼我沒有23:59:59?

如果有人有答案,我會很樂意聽到它。

回答

7

你必須寫

max = max.AddHours(23).AddMinutes(59).AddSeconds(59); 

,而不是

max.AddHours(23).AddMinutes(59).AddSeconds(59); 

否則正確的日期被計算,但沒有分配

1

你有實際值分配給像max變量此

max = max.AddHours(23).AddMinutes(59).AddSeconds(59); 
2

DateTime不可變struct。因此,您無法更改DateTime的實例的值。如果向某個DateTime實例添加或減去某些內容,則會返回一個帶有結果值的新實例。

所以你行

max.AddHours(23).AddMinutes(59).AddSeconds(59); 

不會改變max,但每個Add*調用返回一個新DateTime。您需要將結果值再次分配到max

max = max.AddHours(23).AddMinutes(59).AddSeconds(59); 
0

使用DateTime.Add()方法將時間添加到日期。

DateTime date = DateTime.Parse(dateMax); 
TimeSpan time = new TimeSpan(36, 0, 0, 0); 
DateTime combined = date.Add(time); 
Console.WriteLine("{0:dddd}", combined); 
0

DateTime不變,所以AddHours等方法創建一個新實例的DateTime你必須分配回

// "Date" - trim off time part 
max = max.Date.AddHours(23).AddMinutes(59).AddSeconds(59); 
0

其他人指出瞭如何解決這個問題,但也許你應該知道發生了什麼,並對術語有所瞭解。

該類型DateTime不可變。這意味着一旦將一個DateTime變量初始化爲一個值,就不能再改變它。

所有在DateTime(如AddDaysAddHours,等..)返回一個新DateTime方法。

這是從微軟的源代碼Add方法實際執行:

public DateTime AddTicks(long value) 
{ 
    long ticks = InternalTicks; 
    return new DateTime((UInt64)(ticks + value) | InternalKind); 
} 

正如其他人所指出的,您需要在操作的返回值分配到同一變量max或其他之一:

max = max.Date.AddHours(23).AddMinutes(59).AddSeconds(59); 

你會更好使用max.Date第一的情況下,發送日期未設置爲午夜。

相關問題