如何用分钟创建时间范围?

问题描述

我有这个函数,它通过增加一个小时来返回一个时间范围(在两个 TimeSpan 之间)。

 public static IEnumerable < TimeSpan > Range(TimeSpan start,TimeSpan end) {
     for (var dt = start; dt <= end; dt = dt.Add(new TimeSpan(1,0))) {
         yield
         return dt;
     }
 }

 // As an example
 TimeSpan start = new TimeSpan(09,0);
 TimeSpan end = new TimeSpan(12,0);
 var range = Range(start.Ticks,end.Ticks);

结果:

09:00:00
10:00:00
11:00:00
12:00:00

我想得到的是一个时间范围(以分钟而不是小时为增量):

预期结果:

09:00:00
09:01:00
09:02:00
09:03:00
  ...
11:59:00
12:00:00

我该怎么做才能使它起作用?

解决方法

请阅读 TimeSpan 构造函数的 Documentation

public TimeSpan (int hours,int minutes,int seconds);

将 for 循环中的分配更改为

dt = dt.Add(new TimeSpan(0,1,0))

因为第二个参数是指分钟。第一个是小时。 或者你可以使用

dt = dt.Add(TimeSpan.FromMinutes(1))

为了以后阅读代码时更清楚。