using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GPW.CORE.Data { public class Utils { /// /// Effettua trim di una data al numero di minuti indicato /// /// 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 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; } /// /// 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; } /// /// Costruisce una riga ripetendo un carattere molte volte /// /// /// /// public static string charLine(char padChar, int repNum) { return new string(padChar, repNum); } /// /// 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; } /// /// Inizializzazione con periodo e arrotondamento /// /// /// 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; } } }