2016-07-06 2 views
-1

может кто-нибудь объяснить мне, почему это сделать:Установите DateTime в 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-06-26"
dateMax «2016 -07-06 "
мин {26/06/2016 00:00:00}
max {06/07/2016 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 (например. AddDays, AddHours, и т.д ..) возвращает новый DateTime.

Это фактическая реализация для метода Add из источника Microsoft:

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 первым в случае дата отправлено не было установлено до полуночи.

Смежные вопросы