108 lines
3.9 KiB
C#
108 lines
3.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GPW.CORE.Data
|
|
{
|
|
public class Utils
|
|
{
|
|
/// <summary>
|
|
/// Effettua trim di una data al numero di minuti indicato
|
|
///
|
|
/// 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>
|
|
/// <param name="isFloor">Arrotondamento x difetto (floor = true) o eccesso (false)</param>
|
|
/// <returns></returns>
|
|
public static DateTime DateRounded(DateTime DateOrig, int roundMin, bool isFloor)
|
|
{
|
|
long ticks = 0;
|
|
roundMin = roundMin <= 0 ? 1 : roundMin;
|
|
TimeOnly step = new TimeOnly(0, roundMin);
|
|
if (isFloor)
|
|
{
|
|
ticks = DateOrig.Ticks / step.Ticks;
|
|
}
|
|
else
|
|
{
|
|
ticks = (DateOrig.Ticks + step.Ticks - 1) / step.Ticks;
|
|
}
|
|
DateTime answ = new DateTime(ticks * step.Ticks, DateOrig.Kind);
|
|
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>
|
|
/// <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>
|
|
/// Costruisce una riga ripetendo un carattere molte volte
|
|
/// </summary>
|
|
/// <param name="padChar"></param>
|
|
/// <param name="repNum"></param>
|
|
/// <returns></returns>
|
|
public static string charLine(char padChar, int repNum)
|
|
{
|
|
return new string(padChar, repNum);
|
|
}
|
|
|
|
/// <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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Inizializzazione con periodo e arrotondamento
|
|
/// </summary>
|
|
/// <param name="minRound"></param>
|
|
/// <returns></returns>
|
|
public static DateTime InitDatetime(DateTime dtRif, int minRound)
|
|
{
|
|
TimeSpan DayElapsed = dtRif.Subtract(dtRif.Date);
|
|
int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound;
|
|
DateTime endRounded = DateTime.Today.AddMinutes(minDay);
|
|
return endRounded;
|
|
}
|
|
}
|
|
}
|