public static void CheckPeriods(DateTime start, DateTime end, EnmPDH period) { if (end < start) { throw new ArgumentException("结束时间必须大于开始时间"); } if (period == EnmPDH.Hour && end.Subtract(start).TotalDays > 1) { throw new ArgumentException("按时统计最大支持1天"); } if (period == EnmPDH.Day && end.Subtract(start).TotalDays > 31) { throw new ArgumentException("按日统计最大支持1个月"); } if (period == EnmPDH.Week && end.Subtract(start).TotalDays > 186) { throw new ArgumentException("按周统计最大支持6个月"); } if (period == EnmPDH.Month && end.Subtract(start).TotalDays > 366) { throw new ArgumentException("按月统计最大支持12个月"); } if (period == EnmPDH.Year && end.Subtract(start).TotalDays > 732) { throw new ArgumentException("按月统计最大支持2年"); } }
public static string GetPeriodDisplay(EnmPDH period) { switch (period) { case EnmPDH.Year: return("按年统计"); case EnmPDH.Month: return("按月统计"); case EnmPDH.Week: return("按周统计"); case EnmPDH.Day: return("按日统计"); case EnmPDH.Hour: return("按时统计"); default: return("未定义"); } }
/// <summary> /// 获得时间周期 /// </summary> public static List <Period> GetPeriods(DateTime start, DateTime end, EnmPDH period) { var dates = new List <Period>(); if (period == EnmPDH.Month) { while (start <= end) { var date = new DateTime(start.Year, start.Month, 1).AddMonths(1).AddSeconds(-1); if (date > end) { date = end; } dates.Add(new Period { Name = MonthConverter(start), Start = start, End = date }); start = date.AddSeconds(1); } } else if (period == EnmPDH.Week) { while (start <= end) { var date = start.Date.AddSeconds((8 - (int)start.DayOfWeek) * 86400 - 1); if (date > end) { date = end; } dates.Add(new Period { Name = WeekConverter(start), Start = start, End = date }); start = date.AddSeconds(1); } } else if (period == EnmPDH.Day) { while (start <= end) { var date = start.Date.AddSeconds(86399); if (date > end) { date = end; } dates.Add(new Period { Name = DateConverter(start), Start = start, End = date }); start = date.AddSeconds(1); } } else if (period == EnmPDH.Hour) { while (start <= end) { var date = new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0).AddSeconds(3599); if (date > end) { date = end; } dates.Add(new Period { Name = TimeConverter(start), Start = start, End = date }); start = date.AddSeconds(1); } } return(dates); }