public List <UsageBlock> BreaksInContinousUsageForTimeFrame(DateTime startTime, DateTime endTime, TimeSpan maxAllowedGapInMillis) { List <UsageBlock> usageList = BlocksOfContinousUsageForTimeFrame(startTime, endTime, maxAllowedGapInMillis); List <UsageBlock> notUsageList = new List <UsageBlock>(); UsageBlock notUsageBlock = new UsageBlock(); foreach (UsageBlock usageBlock in usageList) { if (notUsageBlock.StartTime == default && notUsageBlock.EndTime == default) { notUsageBlock.StartTime = usageBlock.EndTime; } else if (notUsageBlock.StartTime != default && notUsageBlock.EndTime == default) { notUsageBlock.EndTime = usageBlock.StartTime; } if (notUsageBlock.StartTime != default && notUsageBlock.EndTime != default) { notUsageList.Add(notUsageBlock); notUsageBlock = new UsageBlock { StartTime = usageBlock.EndTime }; } } return(notUsageList); }
public List <UsageBlock> BlocksOfContinousUsageForTimeFrame(DateTime startTime, DateTime endTime, TimeSpan maxAllowedGapInMillis) { List <HighPrecisionUsageModel> filteredUsages = ComposeListOfUsages(startTime, endTime); List <UsageBlock> blockList = new List <UsageBlock>(); UsageBlock block = new UsageBlock(); foreach (HighPrecisionUsageModel usage in filteredUsages) { if (block.StartTime == default && block.EndTime == default) { block.StartTime = usage.StartTime; block.EndTime = usage.EndTime; } if ((usage.StartTime - block.EndTime) <= maxAllowedGapInMillis) { block.EndTime = usage.EndTime; } else { blockList.Add(block); block = new UsageBlock(usage.StartTime, usage.EndTime); } } if (!blockList.Any(sm => sm.Id == block.Id)) { blockList.Add(block); } return(blockList); }