C# 检查干扰的多个日期时间
我有一个DateTime的列表,包含StartDate和EndDate, 用户应从该列表中选择一个或多个时间跨度。 他们还有一个名为Courses的结构类 如何检查是否有重叠发生 例如,我得到了这个C# 检查干扰的多个日期时间,c#,winforms,datetime,C#,Winforms,Datetime,我有一个DateTime的列表,包含StartDate和EndDate, 用户应从该列表中选择一个或多个时间跨度。 他们还有一个名为Courses的结构类 如何检查是否有重叠发生 例如,我得到了这个 Start Date End Date #1 7/20/2016 7/27/2016 Selected #2 6/18/2016 7/25/2016 Selected #3 7/20/2016 7/27/2016 #4 6/5/2016 6/10/201
Start Date End Date
#1 7/20/2016 7/27/2016 Selected
#2 6/18/2016 7/25/2016 Selected
#3 7/20/2016 7/27/2016
#4 6/5/2016 6/10/2016
在此示例中,用户选择了两个包含重叠的日期
我想用一个消息框或一些使用C#的警告用户
有意见吗
谢谢好的,首先创建一个类时间段,如下所示:
public class TimePeriod
{
public int Id;
public DateTime FromDate
{
get; set;
}
public DateTime ToDate
{
get; set;
}
public static DateTime Parse(string date)
{
var dt = DateTime.Parse(date,
CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.RoundtripKind);
return dt;
}
}
然后创建了包含此类项目的列表:
List<TimePeriod> list = new List<TimePeriod>();
List<TimePeriod> list = new List<TimePeriod>();
最后与LINQ检查重叠情况:
var overlaps = from current in list
from compare in list
where
(
(compare.FromDate > current.FromDate &&
compare.FromDate < current.ToDate) ||
(compare.ToDate > current.FromDate &&
compare.ToDate < current.ToDate)
)
select new
{
Id1 = current.Id,
Id2 = compare.Id,
};
var overlaps=来自列表中的当前值
从比较列表
哪里
(
(比较.FromDate>当前.FromDate&&
compare.FromDatecurrent.FromDate&&
compare.ToDate
在这种情况下,结果将是1/2和2/1以及2/3和3/2。在您的情况下,它将是1/2和2/1。好的,首先创建一个类时间段,如下所示:
public class TimePeriod
{
public int Id;
public DateTime FromDate
{
get; set;
}
public DateTime ToDate
{
get; set;
}
public static DateTime Parse(string date)
{
var dt = DateTime.Parse(date,
CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.RoundtripKind);
return dt;
}
}
然后创建了包含此类项目的列表:
List<TimePeriod> list = new List<TimePeriod>();
List<TimePeriod> list = new List<TimePeriod>();
最后与LINQ检查重叠情况:
var overlaps = from current in list
from compare in list
where
(
(compare.FromDate > current.FromDate &&
compare.FromDate < current.ToDate) ||
(compare.ToDate > current.FromDate &&
compare.ToDate < current.ToDate)
)
select new
{
Id1 = current.Id,
Id2 = compare.Id,
};
var overlaps=来自列表中的当前值
从比较列表
哪里
(
(比较.FromDate>当前.FromDate&&
compare.FromDatecurrent.FromDate&&
compare.ToDate
在这种情况下,结果将是1/2和2/1以及2/3和3/2。在您的情况下,它将是1/2&2/1。有一个非常好的库,用于处理nuget上的时间段及其交点 还有一篇关于它的代码项目的文章。
在nuget上有一个非常好的用于处理时间段及其交集的库 还有一篇关于它的代码项目的文章。
您需要存储已选择的日期,以及它们是否出现在多个选择中,对吗 将每个选定时间跨度的开始日期和结束日期存储到元组selectedTimeSpans 然后:
List useddays=new List();
foreach(在selectedTimeSpans中选择的元组)
{
DateTime start=selected.Value1;
DateTime end=selected.Value2;
日期时间当前=开始;
while(current您需要存储已选择的日期,以及它们是否出现在多个选择中,对吗
将每个选定时间跨度的开始日期和结束日期存储到元组selectedTimeSpans
然后:
List useddays=new List();
foreach(在selectedTimeSpans中选择的元组)
{
DateTime start=selected.Value1;
DateTime end=selected.Value2;
日期时间当前=开始;
而(当前多亏了所有@c0d3b34n和@ThomasVoß
也适用于本文
这就是我所做的一切
好的,首先创建一个类时间段,如下所示:
public class TimePeriod
{
public int Id;
public DateTime FromDate
{
get; set;
}
public DateTime ToDate
{
get; set;
}
public static DateTime Parse(string date)
{
var dt = DateTime.Parse(date,
CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.RoundtripKind);
return dt;
}
}
公共类时间段
{
公共int Id;
公共日期时间起始日期
{
获得;设置;
}
}
然后创建了包含此类项目的列表:
List<TimePeriod> list = new List<TimePeriod>();
List<TimePeriod> list = new List<TimePeriod>();
然后
foreach(列表中的var变量)
{
foreach(列表中的var变量)
{
if(variable.Id==variable.Id)
{
继续;
}
如果((variable.FromDate=variable.FromDate))
{
Console.WriteLine(“问题Hapendes!!{0}={3}”,variable.FromDate.ToString(),variable.ToDate.ToString(),variable.ToDate.ToString(),variable.FromDate.ToString());
}
}
}
感谢所有@c0d3b34n和@ThomasVoß
也适用于本文
这就是我所做的一切
好的,首先创建一个类时间段,如下所示:
public class TimePeriod
{
public int Id;
public DateTime FromDate
{
get; set;
}
public DateTime ToDate
{
get; set;
}
public static DateTime Parse(string date)
{
var dt = DateTime.Parse(date,
CultureInfo.CreateSpecificCulture("en-US"), DateTimeStyles.RoundtripKind);
return dt;
}
}
公共类时间段
{
公共int Id;
公共日期时间起始日期
{
获得;设置;
}
}
然后创建了包含此类项目的列表:
List<TimePeriod> list = new List<TimePeriod>();
List<TimePeriod> list = new List<TimePeriod>();
然后
foreach(列表中的var变量)
{
foreach(列表中的var变量)
{
if(variable.Id==variable.Id)
{
继续;
}
如果((variable.FromDate=variable.FromDate))
{
Console.WriteLine(“问题Hapendes!!{0}={3}”,variable.FromDate.ToString(),variable.ToDate.ToString(),variable.ToDate.ToString(),variable.FromDate.ToString());
}
}
}
您所说的“包含干扰”是什么意思?什么是“干扰”这里?你的问题目前还不太清楚。你的意思是想找出哪些时间间隔重叠吗?看起来用户没有选择日期,但在这里选择了日期范围…在我看来,前三个时间间隔都相互重叠…我假设干扰意味着两个选定课程的开始日期和结束日期相互重叠。可能是d@AlekseyL的副本是的thanks@AlekseyL但是你能给我写一个循环来实现吗,我有一个数组和多个日期时间,所以…你说的“包含干扰”是什么意思?什么是“干扰”这里?你的问题目前还不太清楚。你的意思是想找出哪些时间间隔重叠吗?看起来用户没有选择日期,但在这里选择了日期范围…在我看来,前三个时间间隔都相互重叠…我假设干扰意味着两个选定课程的开始日期和结束日期相互重叠。可能是d@AlekseyL的副本是的thanks@AlekseyL但是你能给我写一个循环吗?我有一个Arr