【问题标题】:Generate time range hourly [closed]每小时生成时间范围[关闭]
【发布时间】:2013-10-31 15:19:34
【问题描述】:

我想根据时间范围创建一个每小时的对象列表。

c#中有没有类似python pandas.timerange的函数?

pandas.time_range("11:00", "21:30", freq="30min")

【问题讨论】:

  • 您必须创建自己的TimeSpan,尽管这只是一个相对的时间跨度,而不是静态的开始-结束时间。
  • 如果你要一个库:试试 DDay.iCal 或 NodaTime。如果你想自己实现,use the search.
  • 唯一不能用标准循环和DateTime解析的部分是30min的配对。
  • 每小时频率为 30 分钟?你需要DateTimes 还是TimeSpans?
  • 每小时/分钟。

标签: c#


【解决方案1】:

作为一个选项,利用 MoreLInq Generate 方法:

//variables used in both examples
var start = TimeSpan.FromHours(11);
var end = TimeSpan.FromHours(21).Add(TimeSpan.FromMinutes(30));

MoreEnumerable.Generate(start, span => span.Add(TimeSpan.FromMinutes(30)))
              .TakeWhile(span => span <= end)

“Native”Linq 查询有点丑:

Enumerable.Range(0, int.MaxValue)
          .Select(multiplier => start.Add(TimeSpan.FromMinutes(30 * multiplier)))
          .TakeWhile(span => span <= end)

两个查询都产生:

11:00:00 
11:30:00 
12:00:00 
12:30:00 
13:00:00 
13:30:00 
14:00:00 
  ...
21:00:00 
21:30:00 

【讨论】:

    【解决方案2】:

    这是一个需要开始/结束时间和之间的分钟数的函数:

    public IEnumerable<DateTime> GetTimeRange(DateTime startTime, DateTime endTime, int minutesBetween)
    {
       int periods = (int)(endTime - startTime).TotalMinutes / minutesBetween;  
       return Enumerable.Range(0,periods+1)
                        .Select (p => startTime.AddMinutes(minutesBetween * p));
    }
    

    你可以在调用函数时只解析初始字符串:

    var times = GetTimeRange(DateTime.Parse("11:00"),DateTime.Parse("21:30"),30);
    

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      相关资源
      最近更新 更多