我正在寻找一种方法,按日块大小将日期范围分成一系列日期范围.我打算用它来缓冲对服务的调用,如果日期范围太大,服务就会出错.
这是我到目前为止所提出的.它似乎工作,但我不确定它是否会正常退出.这看起来像以前可能做过几次,但我找不到它.
public IEnumerable<Tuple<DateTime, DateTime>> SplitDateRange(DateTime start, DateTime end, int dayChunkSize)
{
var newStart = start;
var newEnd = start.AddDays(dayChunkSize);
while (true)
{
yield return new Tuple<DateTime, DateTime>(newStart, newEnd);
if (newEnd == end)
yield break;
newStart = newStart.AddDays(dayChunkSize);
newEnd = (newEnd.AddDays(dayChunkSize) > end ? end : newEnd.AddDays(dayChunkSize));
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找改进建议,或者"伙计,使用这个现有功能!"
Tom*_*sup 31
我认为当开始和结束之间的差异小于dayChunkSize时,您的代码会失败.看到这个:
var singleRange = SplitDateRange(DateTime.Now, DateTime.Now.AddDays(7), dayChunkSize: 15).ToList();
Debug.Assert(singleRange.Count == 1);
Run Code Online (Sandbox Code Playgroud)
建议的解决方案:
public static IEnumerable<Tuple<DateTime, DateTime>> SplitDateRange(DateTime start, DateTime end, int dayChunkSize)
{
DateTime chunkEnd;
while ((chunkEnd = start.AddDays(dayChunkSize)) < end)
{
yield return Tuple.Create(start, chunkEnd);
start = chunkEnd;
}
yield return Tuple.Create(start, end);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7839 次 |
| 最近记录: |