時間範囲のリストを作成する方法はありますか? 例: 次を含むリスト: 12:00 から 1:00 pm 1:00 から 2:00 pm など... 分割セクションは構成です。datetime を使用して、それを特定の数 (この場合は 1 時間) に分割する必要があると思います
誰かが私を正しい方向に向けるか、例を教えてください。
前もって感謝します!
時間範囲のリストを作成する方法はありますか? 例: 次を含むリスト: 12:00 から 1:00 pm 1:00 から 2:00 pm など... 分割セクションは構成です。datetime を使用して、それを特定の数 (この場合は 1 時間) に分割する必要があると思います
誰かが私を正しい方向に向けるか、例を教えてください。
前もって感謝します!
時間範囲を定義する組み込み型はありませんが、 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
を構築する静的メソッドを作成することも非常に簡単です。List<TimeRange>