有人可以解释我为什么要这样做:
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));
}
给我这个:
日期敏 "2016-06-26"
日期最大 "2016-07-06"
分钟 {26/06/2016 00:00:00}
max {06/07/2016 00:00:00} <-- 为什么我没有 23:59:59 ?
如果有人有答案,我会很乐意倾听。
你必须通过
max = max.AddHours(23).AddMinutes(59).AddSeconds(59);
而不是
max.AddHours(23).AddMinutes(59).AddSeconds(59);
否则,将计算正确的日期,但未分配。
或者,您也可以通过以下方式添加此时间跨度
.AddDays(1).AddSeconds(-1)
DateTime
是一个不可变的struct
。因此,您无法更改 DateTime
实例的值。如果向DateTime
实例添加或减去某些内容,则会得到一个返回结果值的新实例。
所以你的线
max.AddHours(23).AddMinutes(59).AddSeconds(59);
不会更改max
,但每个Add*
调用都会返回一个新的DateTime
。您需要再次将结果值分配给max
:
max = max.AddHours(23).AddMinutes(59).AddSeconds(59);
你必须像这样将值分配给max
变量
max = max.AddHours(23).AddMinutes(59).AddSeconds(59);
其他人已经指出了如何解决这个问题,但也许你应该确切地知道发生了什么,并对术语有所了解。
类型 DateTime
是不可变的。这意味着一旦将DateTime
变量初始化为值,就永远无法再次更改它。
DateTime
上的所有方法(例如。 AddDays
、AddHours
等)返回一个新DateTime
。
这是来自 Microsoft 源的 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
以防发送的日期未设置为午夜。
使用 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);