Exemple #1
0
        /// <summary>取得日期時間區段清單的聯集</summary>
        public static IEnumerable <DateTimeSection> UnionSection(this IEnumerable <DateTimeSection> source, IEnumerable <DateTimeSection> target)
        {
            source = source.Concat(target).Where(x => x != null).OrderBy(x => x.Start);

            using (IEnumerator <DateTimeSection> iter = source.GetEnumerator())
            {
                if (!iter.MoveNext())
                {
                    yield break;
                }
                var cursor = new DateTimeSection(iter.Current);

                while (iter.MoveNext())
                {
                    if (iter.Current.Start <= cursor.End)
                    {
                        cursor.End = OrionUtils.Max(iter.Current.End, cursor.End);
                        continue;
                    }

                    yield return(cursor);

                    cursor = new DateTimeSection(iter.Current);
                }

                yield return(cursor);
            }
        }
Exemple #2
0
 /// <summary>取得重疊日期時間區段</summary>
 public static DateTimeSection Overlap(this DateTimeSection sectionA, DateTimeSection sectionB)
 {
     return(new DateTimeSection
     {
         Start = OrionUtils.Max(sectionA.Start, sectionB.Start),
         End = OrionUtils.Min(sectionA.End, sectionB.End),
     });
 }