C# C根据日期列表计算日期范围
给定一个可能无法排序的日期列表,我想建立一个日期范围列表- 例如,假设采用MM/DD格式 输入-5/1、5/5、5/6、5/15、5/7、5/8、5/19、5/20、5/23 输出- Date Range 1: 5/1 to 5/1 Date Range 2: 5/5 to 5/8 Date Range 3: 5/15 to 5/15 Date Range 4: 5/19 to 5/20 Date Range 5: 5/23 to 5/23 基本上,一个范围应该是连续的 您可以为所有日期创建一个日期时间列表(可能使用同一年),并对其进行排序 然后,很容易找到列表中是否存在一天和第二天。您可以创建一个日期时间列表,可能使用同一年对所有日期时间进行排序 然后很容易通过使用找到列表中是否存在某一天和第二天 对日期进行排序 开始一个包含下一个开始日期的范围,它将是第一个日期 第二个有效日期是否为该范围内的下一个日期?如果是这样,继续前进。如果没有,请关闭当前范围并开始新的范围。 重复此操作,直到日期用完,此时关闭当前范围并完成。 对日期进行排序 开始一个包含下一个开始日期的范围,它将是第一个日期 第二个有效日期是否为该范围内的下一个日期?如果是这样,继续前进。如果没有,请关闭当前范围并开始新的范围。 重复此操作,直到日期用完,此时关闭当前范围并完成。C# C根据日期列表计算日期范围,c#,date,C#,Date,给定一个可能无法排序的日期列表,我想建立一个日期范围列表- 例如,假设采用MM/DD格式 输入-5/1、5/5、5/6、5/15、5/7、5/8、5/19、5/20、5/23 输出- Date Range 1: 5/1 to 5/1 Date Range 2: 5/5 to 5/8 Date Range 3: 5/15 to 5/15 Date Range 4: 5/19 to 5/20 Date Range 5: 5/23 to 5/23 基本上,一个范围应该是连续的 您可以为所有日期创建一个
你能把你到目前为止想出的代码贴出来,告诉我们什么不起作用吗?闻起来像是作业。将其标记为这样,并添加您所做的工作以及您所提出的解决方案中存在的具体问题。您是如何从这些输入中获得这些范围的?看起来正确的答案会有一个rand。接下来的某个地方…你能发布你到目前为止想出的代码并告诉我们什么不起作用吗?闻起来像是家庭作业。将其标记为这样,并添加您所做的工作以及您所提出的解决方案中存在的具体问题。您是如何从这些输入中获得这些范围的?看起来正确的答案会有一个兰德。下一个在它的某个地方。。。
public class DateRange
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
[TestClass]
public class DateRangerTest
{
private List<DateRange> GetDateRanges(List<DateTime> dates)
{
if (dates == null || !dates.Any()) return null;
dates = dates.OrderBy(x => x.Date).ToList();
var dateRangeList = new List<DateRange>();
DateRange dateRange = null;
for (var i = 0; i < dates.Count; i++)
{
if (dateRange == null)
{
dateRange = new DateRange { Start = dates[i] };
}
if (i == dates.Count - 1 || dates[i].Date.AddDays(1) != dates[i + 1].Date)
{
dateRange.End = dates[i].Date;
dateRangeList.Add(dateRange);
dateRange = null;
}
}
return dateRangeList;
}
[TestMethod]
public void GetDateRanges_MultiDateRangeTest()
{
var dates = new List<DateTime>
{
new DateTime(1999,5,1),
new DateTime(1999,5,5),
new DateTime(1999,5,6),
new DateTime(1999,5,15),
new DateTime(1999,5,7),
new DateTime(1999,5,8),
new DateTime(1999,5,19),
new DateTime(1999,5,20),
new DateTime(1999,5,23)
};
var dateRanges = GetDateRanges(dates);
Assert.AreEqual(new DateTime(1999, 5, 1), dateRanges[0].Start);
Assert.AreEqual(new DateTime(1999, 5, 1), dateRanges[0].End);
Assert.AreEqual(new DateTime(1999, 5, 5), dateRanges[1].Start);
Assert.AreEqual(new DateTime(1999, 5, 8), dateRanges[1].End);
Assert.AreEqual(new DateTime(1999, 5, 15), dateRanges[2].Start);
Assert.AreEqual(new DateTime(1999, 5, 15), dateRanges[2].End);
Assert.AreEqual(new DateTime(1999, 5, 19), dateRanges[3].Start);
Assert.AreEqual(new DateTime(1999, 5, 20), dateRanges[3].End);
Assert.AreEqual(new DateTime(1999, 5, 23), dateRanges[4].Start);
Assert.AreEqual(new DateTime(1999, 5, 23), dateRanges[4].End);
}
}