public static TimeSpan GetBossDuration(this EncounterData data) { var startTime = data.StartTime; var endTime = data.Tags.ContainsKey(EncounterTag.EndTime) ? (DateTime)data.Tags[EncounterTag.EndTime] : data.EndTime; var totalDuration = (endTime - startTime).TotalSeconds; var duration = totalDuration; var boss = data.GetBoss(); if (boss != null) { foreach (var exclusionPeriod in boss.ExclusionPeriods) { if (totalDuration > exclusionPeriod.StartTime) { duration -= (Math.Min(totalDuration, exclusionPeriod.EndTime) - exclusionPeriod.StartTime); } } } return(TimeSpan.FromSeconds(duration)); }