2016-07-06 323 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第一的情况下,发送日期未设置为午夜。

相关问题