2016-12-08 2 views
-2

リストに欠けているタイマーを見つけたい。 イベントにStartDateとEndDate(時間付き)があります。私はその日/月/年が同じリストにあるので、すべてのオブジェクトで時間だけが異なります。のは、すべてのイベントが、その後2016年1月1日にある倍のように見えることを言ってみましょう:リストに欠けている時間と分を見つけよう

  • スタート:07:00終了:9:00
  • スタート:9:00終了:11:30
  • 開始:午前13時00分終了:午後02時
  • スタート:18時15分終了:20時

を私はそのリスト内の自由な時間を見つけるしたいと思いますので、私はそのような何かを取得したいと思い

  • スタート11:30終了:13時
  • スタート:14時00終了:18時15

どのように私はそのような何かを得ることができますか?

+0

あなたは、あなたが欠けているかを知る必要があり、1時間差を有する値を見つけた場合、リストは、その後2時間の差をwithing流れるべき場合、かなりまっすぐ進む私には...見えます..いくつかのコードやショーを書き始めます私たちはあなたがあなた自身で試したものを、少なくともDateTime Structの中の 'Hour'プロパティで読み上げます。また、TimeSpanと同様にGoogle検索も行います。 – MethodMan

+0

' 00:00 - > 07:00'と20:00~24:00? – TheLethalCoder

+0

@ TheLethalCoderイベントは07:00以降に開始し、20:00以前に終了することができるため、その時間を探す必要はありません。 – Cezar

答えて

1

次を試してみてください、これは時間が順番

var today = DateTime.UtcNow; 

var bookedTimes = new[] 
{ 
    new DateRange(new DateTime(today.Year, today.Month, today.Day, 07, 00, 00), 
     new DateTime(today.Year, today.Month, today.Day, 09, 00, 00)), 
    new DateRange(new DateTime(today.Year, today.Month, today.Day, 09, 00, 00), 
     new DateTime(today.Year, today.Month, today.Day, 11, 00, 00)), 
    new DateRange(new DateTime(today.Year, today.Month, today.Day, 13, 00, 00), 
     new DateTime(today.Year, today.Month, today.Day, 14, 00, 00)), 
    new DateRange(new DateTime(today.Year, today.Month, today.Day, 18, 00, 00), 
     new DateTime(today.Year, today.Month, today.Day, 20, 00, 00)), 
}; 

var freeTimes = new List<DateRange>(); 
for (var i = 0; i < bookedTimes.Length -1; i++) 
{ 
    var current = bookedTimes[i]; 
    var next = bookedTimes[i + 1]; 

    if (current.To != next.From) 
    { 
     var range = new DateRange(current.To, next.From); 
     freeTimes.Add(range); 
    } 
} 

foreach (var time in freeTimes) 
{ 
    Console.WriteLine($"From {time.From.ToShortTimeString()}, to: {time.To.ToShortTimeString()}"); 
} 

// Outputs: 
// From 11:00, to: 13:00 
// From 14:00, to: 18:00 
+0

ちょうど私がドットの後に使うことができる機能や方法があると思ったが、それは自分で書かなければならないようだ。ありがとう – Cezar

0

にあなたはまた、エントリ場所を除外し、その後自身に離れギャップリスト&を作成する1つのエントリをリストに参加するためにLINQのジップメソッドを使用することができていると仮定します開始&終了時刻は同じです。

var gaplist = 
     eventlist.Zip(eventlist.Skip(1), (ev1, ev2) => new MyEvent(ev1.End, ev1.Start)) 
       .Where(gp => gp.Start != gp.End) 
       .ToList(); 
関連する問題