using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Core
{
public class Utils
{
///
/// Effettua arrotondamento di un timespan ad un dato step di minuti
///
/// vedere qui: https://stackoverflow.com/questions/1393696/rounding-datetime-objects
///
/// DataOra originale
/// Minuti di arrotondamento richeisti
/// Arrotondamento x difetto (floor = true) o eccesso (false)
///
public static TimeSpan TSpanRounded(TimeSpan TSpanOrig, int roundMin, bool isFloor)
{
long ticks = 0;
roundMin = roundMin <= 0 ? 1 : roundMin;
TimeOnly step = new TimeOnly(0, roundMin);
if (isFloor)
{
ticks = TSpanOrig.Ticks / step.Ticks;
}
else
{
ticks = (TSpanOrig.Ticks + step.Ticks - 1) / step.Ticks;
}
TimeSpan answ = new TimeSpan(ticks * step.Ticks);
return answ;
}
///
/// Effettua arrotondamento di un timespan ad un dato step di minuti
///
/// vedere qui: https://stackoverflow.com/questions/1393696/rounding-datetime-objects
///
/// DataOra originale
/// Minuti di arrotondamento richeisti
///
public static TimeSpan TSpanRounded(TimeSpan TSpanOrig, int roundMin)
{
long ticks = 0;
roundMin = roundMin <= 0 ? 1 : roundMin;
TimeOnly step = new TimeOnly(0, roundMin);
ticks = (TSpanOrig.Ticks + step.Ticks / 2) / step.Ticks;
TimeSpan answ = new TimeSpan(ticks * step.Ticks);
return answ;
}
}
}