using System; using System.Collections.Generic; using System.Linq; namespace Core.Common.Utils { public static class SnappingCalculator // TODO: the class has very bad name, move it next to TimeSeriesNavigator { /// /// Get nearest value in times for value. /// /// /// /// public static DateTime GetNearestDefinedTime(IEnumerable times, DateTime value) { if (!times.Any()) { return default(DateTime); } //minimun var minDuration = times.Select(t => (t - value).Duration()).Min(); //selection the time with this minimum var q = from t in times where (t - value).Duration() == minDuration select t; return q.FirstOrDefault(); } public static DateTime? GetLastTimeInRange(IEnumerable times, DateTime? start, DateTime? end) { var time = times.OrderByDescending(t => t).FirstOrDefault(t => t >= start && t <= end); return time == default(DateTime) ? (DateTime?) null : time; } public static DateTime? GetFirstTimeInRange(IEnumerable times, DateTime? start, DateTime? end) { var time = times.OrderBy(t => t).FirstOrDefault(t => t >= start && t <= end); return time == default(DateTime) ? (DateTime?) null : time; } public static DateTime? GetFirstTimeLeftOfValue(IEnumerable times, DateTime? start) { var time = times.OrderByDescending(t => t).FirstOrDefault(t => t <= start); return time == default(DateTime) ? (DateTime?) null : time; } } }