using System.Collections.Generic;
using System.Globalization;
const string DateValues = @"20180430 20180428 20180426 20180425 20180424 20180423 20180422 20180421 20180420 20180415 20180414
20180413 20180412 20180411 20180410 20180419 20180418 20180406 20180526 20180404 20180525 20180403
20180402 20180523 20180401 20180522 20180521 20180520 20180409 20180408 20180407 20180528 20180516
20180515 20180514 20180513 20180512 20180511 20180510 20180519 20180518 20180517 20180505 20180503
20180502 20180501 20180509 20180508 20180507 20180506 20180328 20180327 20180326 20180325 20180324
20180323 20180322 20180321 20180320 20180331 20180330";
public static void Main()
var dates = DateValues.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)
.Where(d => !string.IsNullOrEmpty(d))
.Select(d => DateTime.ParseExact(d, "yyyyMMdd", CultureInfo.InvariantCulture))
var dateRanges = new List<DateRange>();
for (var i = 1; i < dates.Count; i++)
var elapsedDays = (dates[i] - dates[i - 1]).Days;
var range = new DateRange
Begin = dates[rangeBeginIndex],
var finalRange = new DateRange
Begin = dates[rangeBeginIndex],
End = dates[dates.Count - 1]
dateRanges.Add(finalRange);
foreach (var range in dateRanges)
var duration = (range.End - range.Begin).Days;
Console.WriteLine("Found range {0:yyyyMMdd} - {1:yyyyMMdd} ({2} days)",
range.Begin, range.End, duration);
public DateTime Begin { get; set; }
public DateTime End { get; set; }