将DateTime设置为23:59:59

时间:2016-07-06 08:37:22

标签: c# datetime

有人可以解释我为什么这样做:

        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?

如果有人有答案,我会很高兴听到。

6 个答案:

答案 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上的所有方法(例如AddDaysAddHours等)都会返回一个新的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