2016-12-14 47 views
0

我有一個列表,其中時間類:生成對象填寫日期時間空間

public class Time 
{ 
    public DateTime From { get; set; } 
    public DateTime To { get; set; } 
} 

這份名單充滿對象時從DB到來。因此,在該過程結束時,我有一個可以讓他們之間的時間間隔對象的列表,例如:

Time1: 
    From: 1/1/2017 12:00 
    To: 1/1/2017 13:00 
Time2: 
    From: 1/1/2017 13:00 
    To: 1/1/2017 16:00 
Time3: 
    From: 1/1/2017 20:00 
    To: 1/1/2017 22:00 

所以,我應該創建三個對象時間是這樣的:

Time4: 
    From: 1/1/2017 00:00 
    To: 1/1/2017 11:00 
Time5: 
    From: 1/1/2017 16:00 
    To: 1/1/2017 20:00 
Time6: 
    From: 1/1/2017 22:00 
    To: 1/1/2017 23:59 

這個想法是讓所有的日期時間完整的列表,在中間沒有留下時間槽。

所以,正如我所說,對象時間1,2,3我已經擁有它,因爲它們是從數據庫生成的,但我需要一個算法來生成對象時間4,5,6

任何想法?

+0

請仔細閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

回答

0

您需要編寫自定義邏輯以基於從數據庫自動填充的列表填寫缺失的時隙。您需要運行(迭代)循環並比較時間值From值,並在運行時使用動態值創建Time類的新對象,並將其插入到列表中。

0

排序日期。創建一個開始日期。迭代。

DEMOhttps://repl.it/Eqbd/0

using System; 
using System.Collections.Generic; 

class MainClass { 

    public class Time 
    { 
    public DateTime From { get; set; } 
    public DateTime To { get; set; } 
    public string Src { get; private set; } 

    public Time(){ 
     Src = "DB"; 
    } 

    public Time Gap(DateTime prev) { 
     if(prev >= this.From) return null; 
     return new Time {From = prev, To = this.From, Src="GAP"}; 
    } 

    public static Time Gap(DateTime from, DateTime to){ 
     if(from >= to) return null; 
     return new Time {From = from, To = to, Src="GAP"}; 
    } 

    override public string ToString(){ 
     return $"Time: {Src}\n\t{From}\n\t{To}"; 
    } 
    } 



    public static void Main (string[] args) { 
    var times = new List<Time>(); 
    times.Add(new Time {From = DateTime.Parse("1/1/2017 12:00 PM"), To=DateTime.Parse("1/1/2017 13:00 PM")}); 
    times.Add(new Time {From = DateTime.Parse("1/1/2017 13:00 PM"), To=DateTime.Parse("1/1/2017 16:00 PM")}); 
    times.Add(new Time {From = DateTime.Parse("1/1/2017 20:00 PM"), To=DateTime.Parse("1/1/2017 22:00 PM")}); 

    // Begin 

    times.Sort((a, b) => a.From.CompareTo(b.From)); 

    var prev = DateTime.Parse("1/1/2017 00:00 AM"); 
    var last = prev.AddDays(1).AddMilliseconds(-1); 
    Time gap; 

    foreach(var time in times.ToArray()) { 
     gap = time.Gap(prev); 
     if(gap != null) { 
     times.Add(gap); 
     } 
     prev = time.To; 
    } 

    gap = Time.Gap(prev, last); 
    if(gap != null) { 
     times.Add(gap); 
    } 

    foreach(var time in times){ 
     Console.WriteLine (time); 
    } 

    } 
}