有没有办法列出时间范围?例如: 一个列表包含: 12:00 到 1:00 pm 1:00 到 2:00 pm 等等... 其中分割部分是配置。我认为您必须使用日期时间并将其划分为某个数字(在这种情况下为一小时)
有人可以指出我正确的方向或提供一个例子吗?
提前致谢!
有没有办法列出时间范围?例如: 一个列表包含: 12:00 到 1:00 pm 1:00 到 2:00 pm 等等... 其中分割部分是配置。我认为您必须使用日期时间并将其划分为某个数字(在这种情况下为一小时)
有人可以指出我正确的方向或提供一个例子吗?
提前致谢!
没有定义时间范围的内置类型,但通过组合 aDateTime
和 a来创建一个非常容易TimeSpan
。例如:
struct TimeRange
{
private readonly DateTime start;
private readonly TimeSpan duration;
public TimeRange ( DateTime start, TimeSpan duration )
{
this.start = start;
this.duration = duration;
}
}
然后,您可以List<TimeRange>
使用特定DateTime
作为起点并TimeSpan
为每个元素添加所需的内容来构建一个。例如,这是一个非常基本的实现,它TimeRange
包含一个调用的方法,该方法根据子范围的当前和所需的持续时间Split
返回一个。IEnumerable<TimeRange>
TimeRange
struct TimeRange
{
private readonly DateTime start;
private readonly TimeSpan duration;
public TimeRange ( DateTime start, TimeSpan duration )
{
this.start = start;
this.duration = duration;
}
public DateTime From { get { return start; } }
public DateTime To { get { return start + duration; } }
public TimeSpan Duration { get { return duration; } }
public IEnumerable<TimeRange> Split (TimeSpan subDuration)
{
for (DateTime subRangeStart = From; subRangeStart < this.To; subRangeStart += subDuration)
{
yield return new TimeRange(subRangeStart, subDuration);
}
}
public override string ToString()
{
return String.Format ("{0} -> {1}", From, To);
}
}
然后,您可以执行以下操作:
TimeRange mainRange = new TimeRange(DateTime.Now, new TimeSpan(12, 0, 0));
List<TimeRange> rangeList = mainRange.Split(new TimeSpan(1, 0, 0)).ToList();
这将列出从当前时间开始的 1 小时持续时间的 12 个时间范围。
** 更新 **
请注意,上述实现是非常基本的。例如,如果子持续时间不是父范围的整数部分,则该Split
方法将愉快地生成最后一个子范围的结尾超出父范围的结尾的范围。但是,很难为这种事情添加检查。真正的问题是你想在这种情况下发生什么。
创建一个无需显式父范围即可TimeRange.CreateList
构建 a的静态方法也很容易。List<TimeRange>