获取分时计算的小时数据
查询某个时间段,在一群时间区间的小时数据,(2024-03-01 00:00:00 ,2024-05-31 01:00:00)
表示每天的0点到1点
var startDate = "20240831200000";var endDate = "20240901195959";List<TimingConfig> timingConfigs = new List<TimingConfig>();TimingConfig timingConfig = new TimingConfig();timingConfig.StartTime =DateTime.ParseExact("2024-03-01 00:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfig.EndTime = DateTime.ParseExact("2024-05-31 01:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfigs.Add(timingConfig);timingConfig = new TimingConfig();timingConfig.StartTime = DateTime.ParseExact("2024-03-01 06:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfig.EndTime = DateTime.ParseExact("2024-03-01 12:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfigs.Add(timingConfig);timingConfig = new TimingConfig();timingConfig.StartTime = DateTime.ParseExact("2024-03-01 15:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfig.EndTime = DateTime.ParseExact("2024-03-01 16:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfigs.Add(timingConfig);timingConfig = new TimingConfig();timingConfig.StartTime = DateTime.ParseExact("2024-06-01 08:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfig.EndTime = DateTime.ParseExact("2024-08-31 15:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfigs.Add(timingConfig);timingConfig = new TimingConfig();timingConfig.StartTime = DateTime.ParseExact("2024-06-01 23:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfig.EndTime = DateTime.ParseExact("2024-09-01 00:00:00", "yyyy-MM-dd HH:mm:ss", null);timingConfigs.Add(timingConfig);var configs = timingConfigs.ExtractHourlyData(startDate.AsDateTime(), endDate.AsDateTime());
/// <summary>/// 获取分时计算的小时数据/// </summary>/// <param name="configList"></param>/// <param name="startTime"></param>/// <param name="endTime"></param>/// <returns></returns>internal static List<TimingConfig> GetRangeHourlyData(this List<TimingConfig> configList,DateTime startTime, DateTime endTime){List<TimingConfig> timingConfigs = new List<TimingConfig>();foreach (var timingConfig in configList){DateTime currentDateTime = startTime;DateTime rangeStartDate = timingConfig.StartTime;int startHour = rangeStartDate.Hour;DateTime rangeEndDate = timingConfig.EndTime;int endHour = rangeEndDate.Hour;if (endHour == 0){rangeEndDate = rangeEndDate.AddSeconds(-1);endHour = 24;}while (currentDateTime <= endTime){if (currentDateTime >= rangeStartDate && currentDateTime < rangeEndDate&& currentDateTime.Hour >= startHour && currentDateTime.Hour < endHour){TimingConfig config = new TimingConfig();config.MediaId = timingConfig.MediaId;config.StartTime = currentDateTime;config.EndTime = currentDateTime;timingConfigs.Add(config);}currentDateTime = currentDateTime.AddHours(1);}}return timingConfigs;}
- 该方法接受三个参数,分别是configList(TimingConfig对象列表)、startTime(起始时间)、endTime(结束时间)。
- 实现逻辑:
- 遍历传入的configList中的每一个TimingConfig对象。
- 对于每个TimingConfig对象,获取其StartTime和EndTime对应的小时数(startHour和endHour)。
- 循环遍历从startTime到endTime的每个小时,判断当前时间是否在某个TimingConfig对象的时间范围内,并且当前小时是否在指定的范围内。
- 如果满足条件,则创建一个新的TimingConfig对象,设置MediaId、StartTime和EndTime,并添加到结果列表timingConfigs中。