#c# #asp.net-mvc #asp.net-mvc-3 #datetime
#c# #asp.net-mvc #asp.net-mvc-3 #дата-время
Вопрос:
—-РЕДАКТИРОВАТЬ—-
О, мне жаль, что это была огромная ошибка 🙂
Позвольте мне задать вопрос еще раз…
Вот пример,
Datetime startTime = 2011-10-08 12:30:00
Datetime endTime = 2011-10-10 15:00:00
Сколько раз 12:00:00 — 13:00:00 происходят между двумя датами времени?
2011-10-08 12:30:00 - 2011-10-08 13:00:00 Not Ok (time has alredy started)
2011-10-09 12:00:00 - 2011-10-09 13:00:00 Ok
2011-10-10 12:00:00 - 2011-10-10 13:00:00 Ok
Ожидаемый результат 2.
Заранее спасибо!
Комментарии:
1. Почему вы ожидаете, что это будет три? Временной интервал представляет собой промежуток времени. Ваш пример представляет 13 часов, 0 минут и 0 секунд. Не могли бы вы предоставить более подробную информацию о том, чего вы хотите достичь?
2. Вы пытаетесь определить, сколько 13-часовых периодов происходит за время между вашим начальным и конечным временем, или вы пытаетесь определить, сколько времени 13:00 (1pm) происходит между заданными начальными / конечными временами?
Ответ №1:
(endTime-startTime).Ticks/timeSpan.Ticks
Ответ №2:
После просмотра вашего обновления вам захочется сделать что-то вроде определения дней для проверки и проверки границ, чтобы увидеть, соответствуют ли конкретные сроки вашим датам начала и окончания. В качестве идеи, вот несколько примеров кода, которые я собрал.
private static void CheckTimes()
{
DateTime start = DateTime.Parse("2011-10-08 12:30:00");
DateTime end = DateTime.Parse("2011-10-10 15:00:00");
// variable to use for bound checking (Date property sets the hour to 00)
DateTime boundscheck = start.Date;
// variable containing results
int timesFound = 0;
// This loop assumes we are only looking for one match per day
for (int i = 0; i <= (end - start).Days; i )
{
// set the lower bound to yyyy-mm-dd 12:00:00
var lowerbound = boundscheck.Date.AddHours(12);
// set the upper bound to yyyy-mm-dd 13:00:00
var upperbound = lowerbound.AddHours(1);
//determine if bounds are within our start and end date
if (lowerbound >= start amp;amp; upperbound <= end)
{
timesFound ;
}
// increment boundscheck variable by one day
boundscheck = boundscheck.AddDays(1);
}
}
Надеюсь, это поможет.
Комментарии:
1. Большое спасибо! Именно то, что я искал! Отличная работа!
Ответ №3:
Возьмите разницу в два дня, разделенную на интервал.
TimeSpan timeSpan = new TimeSpan(24, 00, 00); // one day
DateTime start = new DateTime(2011, 10, 08, 11, 00, 00);
DateTime end = new DateTime(2011, 10, 10, 23, 00, 00); // 2 and 1/2 days later
var occurances = ((end - start).Ticks / (float)timeSpan.Ticks); // 2.5f