求高手解决一个日期相关的问题
包括的日期段(实际情况可能比下例更多组合)2008-10-1 至 2008-10-31
2008-11-10 至 2008-11-30
2008-9-10 至 2008-9-26
不包括的日期段(实际情况可能比下例更多组合)
2008-10-10 至 2008-10-21
2008-10-29 至 2008-11-13
2008-9-20 至 (2008-9-30)
最后按上面两种条件,筛选出下面这种组合,挑选出包括的日期段
2008-10-1 2008-10-10
2008-10-21 2008-10-29
2008-11-13 2008-11-30
2008-9-10 2008-9-20
求高手解答 --------------------编程问答-------------------- 晕,这是哪门子的需求?
说说具体的应用场景? --------------------编程问答-------------------- 用作机票的运价录入的一个需求,客户选择好所有日期段后,在后台要拼成最后的结果,存进库,想着头有点大,各种可能性太多了 --------------------编程问答-------------------- up --------------------编程问答-------------------- 不太清楚什么意思 --------------------编程问答-------------------- 包括的日期段(实际情况可能比下例更多组合)
2008-10-1 至 2008-10-31
2008-11-10 至 2008-11-30
2008-9-10 至 2008-9-26
不包括的日期段(实际情况可能比下例更多组合)
2008-10-10 至 2008-10-21
2008-10-29 至 2008-11-13
2008-9-20 至 (2008-9-30)
写起来的确可能比较麻烦,包括或者不包括里面不会有重复的时间吧?
2008-10-1 至 2008-10-31
2008-11-10 至 2008-11-30
2008-9-10 至 2008-9-26
即这里没有重叠的
我的想法是先都升序排列一下,然后再去比较。
简化点说:
a-b
c-d
不包括
e-f
g-h
当然这是升序排列以后的结果,那么现在应该做一个循环,先看a-b这一个与不包括的关系,其他的走一个循环:
if a<e then
if b<e 取a-b
if b>e 先取a-e
if b>f 再取f-b
if b<f 不取
if a>e
if a>f 不取
if a<f
反正你每种都去分析一下就是了,呵呵,当然这只是我个人的想法,这个不好看的,你可以简化成数字来搞
如:1-5,7-10里没有2-6,9-10这种类似的啦... --------------------编程问答-------------------- 这种需求还真是易做图啊...
--------------------编程问答-------------------- 这个问题嘛,
遍历一下即可搞定,回去看看数据结构,很简单的算法即可实现。
给个思路,
struct 时间段
{
起始时间,
结束时间
}
然后先在包含的时间段中,内部排序。同时在不包括的时间段中再内部排排序。
最后再把它们一起写个函数即可搞定。 --------------------编程问答-------------------- LS的看来蛮厉害的嘛,呵呵,我也该补补数据结构了... --------------------编程问答-------------------- public struct DatePair
{
public DateTime beginDate;
public DateTime endDate;
}
private System.Collections.ArrayList GetValidDate(DatePair[] validPair, DatePair[] notValidPair)
{
System.Collections.ArrayList arr = new System.Collections.ArrayList();
for (int i = 0; i < notValidPair.Length; i++)
{
for (int j = 0; j < validPair.Length; j++)
{
if (notValidPair[i].beginDate >= validPair[j].endDate || notValidPair[i].endDate <= validPair[j].beginDate)
break;
if (notValidPair[i].beginDate < validPair[j].beginDate && notValidPair[i].endDate < validPair[j].endDate)
{
DatePair dp = new DatePair();
dp.beginDate = notValidPair[i].endDate.AddDays(1);
dp.endDate = validPair[j].endDate;
arr.Add(dp);
break;
}
//其它还有若干种情况
}
}
return arr;
} --------------------编程问答-------------------- 什么意思啊,没看明白?
补充:.NET技术 , C#