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;
}
}
}