有人可以解释我为什么这样做:
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-06-26"
dateMax" 2016-07-06"
min {26/06/2016 00:00:00}
max {06/07/2016 00:00:00}< - 为什么我没有23:59:59?
如果有人有答案,我会很高兴听到。
答案 0 :(得分:8)
你必须写
max = max.AddHours(23).AddMinutes(59).AddSeconds(59);
而不是
max.AddHours(23).AddMinutes(59).AddSeconds(59);
否则正在计算正确的日期但未分配
答案 1 :(得分:2)
now() -21 days
是不可变的DateTime
。因此,您无法更改struct
实例的值。如果您向DateTime
实例添加或减去某些内容,则会获得一个新实例,并返回结果值。
所以你的行
DateTime
不会更改max.AddHours(23).AddMinutes(59).AddSeconds(59);
,但每个max
调用都会返回一个新的Add*
。您需要再次将结果值分配给DateTime
:
max
答案 2 :(得分:1)
您必须实际将值分配给max
变量,如此
max = max.AddHours(23).AddMinutes(59).AddSeconds(59);
答案 3 :(得分: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);
答案 4 :(得分:0)
DateTime
不可变,因此AddHours
和其他方法会创建一个新实例 DateTime
,你必须分配回来:
// "Date" - trim off time part
max = max.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
答案 5 :(得分:0)
其他人已经指出了如何解决这个问题,但也许你应该知道发生了什么,并对术语有所了解。
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
。