56 lines
2.0 KiB
C#
56 lines
2.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Core
|
|
{
|
|
public class Utils
|
|
{
|
|
/// <summary>
|
|
/// Effettua arrotondamento di un timespan ad un dato step di minuti
|
|
///
|
|
/// vedere qui: https://stackoverflow.com/questions/1393696/rounding-datetime-objects
|
|
/// </summary>
|
|
/// <param name="TSpanOrig">DataOra originale</param>
|
|
/// <param name="roundMin">Minuti di arrotondamento richeisti</param>
|
|
/// <param name="isFloor">Arrotondamento x difetto (floor = true) o eccesso (false)</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua arrotondamento di un timespan ad un dato step di minuti
|
|
///
|
|
/// vedere qui: https://stackoverflow.com/questions/1393696/rounding-datetime-objects
|
|
/// </summary>
|
|
/// <param name="DateOrig">DataOra originale</param>
|
|
/// <param name="roundMin">Minuti di arrotondamento richeisti</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
}
|