以特定方式拆分日期范围的问题
Problem with splitting date range in a specific way
假设我有两个像这样的 DateTime 对象,我想将日期范围分成以天为单位的块大小;
var date1 = new DateTime(2022, 3, 1, 8, 30, 0);
var date2 = new DateTime(2022, 3, 5, 11, 30, 0);
这种方法可以完成工作;
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);
}
并给我这样的结果集;
{(1.03.2022 08:30:00, 2.03.2022 08:30:00)}
{(2.03.2022 08:30:00, 3.03.2022 08:30:00)}
{(3.03.2022 08:30:00, 4.03.2022 08:30:00)}
{(4.03.2022 08:30:00, 5.03.2022 08:30:00)}
{(5.03.2022 08:30:00, 5.03.2022 11:30:00)}
我真正需要的是这样的结果集;
{(1.03.2022 08:30:00, 2.03.2022 00:00:00)}
{(2.03.2022 00:00:00, 3.03.2022 00:00:00)}
{(3.03.2022 00:00:00, 4.03.2022 00:00:00)}
{(4.03.2022 00:00:00, 5.03.2022 00:00:00)}
{(5.03.2022 00:00:00, 5.03.2022 11:30:00)}
有什么想法吗?
您可以使用 DateTime.Date
属性 来截断时间部分。
替换下面两行:
yield return Tuple.Create(start, chunkEnd);
start = chunkEnd;
与:
yield return Tuple.Create(start, chunkEnd.Date);
start = chunkEnd.Date;
如果 chuckend 不是集合中的第一项或最后一项,您可以将其时间部分替换为:
chunkEnd = new DateTime(chunkEnd.Year, chunkEnd.Month, chunkEnd.Day, 00, 00, 00);
假设我有两个像这样的 DateTime 对象,我想将日期范围分成以天为单位的块大小;
var date1 = new DateTime(2022, 3, 1, 8, 30, 0);
var date2 = new DateTime(2022, 3, 5, 11, 30, 0);
这种方法可以完成工作;
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);
}
并给我这样的结果集;
{(1.03.2022 08:30:00, 2.03.2022 08:30:00)}
{(2.03.2022 08:30:00, 3.03.2022 08:30:00)}
{(3.03.2022 08:30:00, 4.03.2022 08:30:00)}
{(4.03.2022 08:30:00, 5.03.2022 08:30:00)}
{(5.03.2022 08:30:00, 5.03.2022 11:30:00)}
我真正需要的是这样的结果集;
{(1.03.2022 08:30:00, 2.03.2022 00:00:00)}
{(2.03.2022 00:00:00, 3.03.2022 00:00:00)}
{(3.03.2022 00:00:00, 4.03.2022 00:00:00)}
{(4.03.2022 00:00:00, 5.03.2022 00:00:00)}
{(5.03.2022 00:00:00, 5.03.2022 11:30:00)}
有什么想法吗?
您可以使用 DateTime.Date
属性 来截断时间部分。
替换下面两行:
yield return Tuple.Create(start, chunkEnd);
start = chunkEnd;
与:
yield return Tuple.Create(start, chunkEnd.Date);
start = chunkEnd.Date;
如果 chuckend 不是集合中的第一项或最后一项,您可以将其时间部分替换为:
chunkEnd = new DateTime(chunkEnd.Year, chunkEnd.Month, chunkEnd.Day, 00, 00, 00);