2013-02-11 8 views
1

Я просто пытаюсь найти логику для решения этой проблемы, но застрял.Рассчитать разницу во времени с перекрывающимся временем

У меня есть 6-я дата-столбец в моем db. например, ниже

StartDate = {14/1/2012 11:00:00 AM} 
EndDate=  {14/1/2012 11:30:00 AM} 

**Break between start and End Date is 30 mins** 

StartDate2 = {14/1/2012 11:30:00 AM} 
EndDate2= {14/1/2012 12:30:00 PM} 

**Break between start1 and End1 Date is 1hr** 

StartDate3 = {14/1/2012 12:00:00 PM} 
EndDate3= {14/1/2012 01:30:00 PM} 
**Break between start2 and End2 Date is 1hr is 1hr** 

Я пытаюсь найти разрыв между каждым набором даты и итогом финала.

Для например:

StartDate = {14/1/2012 11:00:00 AM} 
EndDate=  {14/1/2012 11:30:00 AM} 

Перерыв между датой начала и окончания 30 минут.

Но если вы видели начальную и конечную дату 2 и 3, время перекрывается. поэтому не уверен, что временный интервал поможет в этом сценарии.

Общий перерыв между всеми тремя метки времени и сумма должна быть до 2hours 30 минут

Пожалуйста, кто-нибудь бросить некоторые идеи, чтобы решить эту проблему.

Заранее спасибо

ответ

3

не уверен, как TimeSpan поможет в этом сценарии.

TimeSpan, произведенный путем вычитания более поздней формы времени, ранее был отрицательным. Например,

var dt1 = DateTime.Parse("02/10/2013 12:20"); 
var dt2 = DateTime.Parse("02/10/2013 12:00"); 
Console.WriteLine(dt2.Subtract(dt1)); 

prints -00:20:00.

Вы можете проверить, является ли интервал отрицательным для обнаружения перекрытий. Один из способов сделать это рассматривает Ticks свойство для отрицательна:

var dt1 = DateTime.Parse("02/10/2013 12:20"); 
var dt2 = DateTime.Parse("02/10/2013 12:00"); 
var diff = dt2.Subtract(dt1); 
if (diff.Ticks < 0) { 
    Console.WriteLine("An overlap is detected."); 
} 
+0

Благодаря dasblinkenlight, Поправьте меня, если ошибаюсь, так что я должен проверить «тиков» между всеми датами и если нет отрицательна, то я может вычесть, если не получить отрицательное значение и добавить его обратно. – Usher

+0

для например: EndDate2 = {14/1/2012 12:30:00 PM} StartDate3 = {14/1/2012 12:00:00} вар DT1 = DateTime.Parse (EndDate2); var dt2 = DateTime.Parse (StartDate3); var diff = dt2.Subtract (dt1); если (diff.Ticks <0) { здесь получить разницу, что означает -30 } Теперь вычитаем время между (StartDate3 - End date3) -30 мин. Эта логика имеет смысл – Usher

+1

@ Если вы хотите проверить, наступает ли дата начала позже конечной даты, вы можете просто использовать 'if (startDate> endDate)'. Это может иметь больше смысла, чем вычислять разницу и проверять ее позитивный/отрицательный знак. –

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