public static ReportPeriodRange GetRange(ReportPeriod period, DateTime to) { var data = new ReportPeriodRange() { Period = period, To = to }; if (period == ReportPeriod.Hour) { data.From = data.To.AddHours(-1); } else if (period == ReportPeriod.Day) { data.From = data.To.AddDays(-1); } else if (period == ReportPeriod.Week) { data.From = data.To.AddDays(-7); } else if (period == ReportPeriod.Month) { data.From = data.To.AddMonths(-1); } else { throw new Exception("Неизвестное значение period: " + period); } return(data); }
public static ReportPeriodRange RoundToRight(ReportPeriodRange range, TimeSpan round) { var newRange = RoundToLeft(range, round); if (newRange.From == range.From) { return(range); } return(new ReportPeriodRange() { Period = range.Period, From = range.From + round, To = range.To + round }); }
public static ReportPeriodRange RoundToLeft(ReportPeriodRange range, TimeSpan round) { if (range == null) { throw new ArgumentNullException(nameof(range)); } var fromYear = new DateTime(range.From.Year, 1, 1); long fromMs = (long)(range.From - fromYear).TotalMilliseconds; long roundMs = (long)round.TotalMilliseconds; long times = (fromMs / roundMs); var from = fromYear.AddMilliseconds(roundMs * times); return(new ReportPeriodRange() { Period = range.Period, From = from, To = from.AddMilliseconds(roundMs * times) }); }