如何将日期划分成区间段(散所有分)

eceg 2008-08-29 06:08:50
比如现在List<DateTime>中存放的是:

2008年8月1日
2008年8月4日
2008年8月5日
2008年8月7日
2008年8月11日
2008年8月12日
2008年8月13日
2008年8月15日
2008年8月18日
2008年8月19日
2008年8月21日
2008年8月22日
2008年8月27日
2008年8月29日

请问现在如何将它按周时间段及不连续时间段划分.列如:

开始时间:2008年8月1日

结束时间:2008年8月1日



开始时间:2008年8月4日


结束时间:2008年8月5日



开始时间:2008年8月7日

结束时间:2008年8月7日



开始时间:2008年8月11日

结束时间:2008年8月13日

.

.

.

.
...全文
274 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
eceg 2008-08-30
  • 打赏
  • 举报
回复
list中已经去除了周六周日或假日,该判断日期不连续情况和是否属于同一周里
wdgphc 2008-08-30
  • 打赏
  • 举报
回复
对了,开始要加上 using System.Globalization;
wdgphc 2008-08-30
  • 打赏
  • 举报
回复
给你写了个代码,应该还有精简的地方,你自己试试吧.变量简单说了一下,你可按自己的需要改.

private void CheckListDate()
{
List<DateTime> l = new List<DateTime>{
Convert.ToDateTime("2008年8月1日"),
Convert.ToDateTime("2008年8月4日"),
Convert.ToDateTime("2008年8月5日"),
Convert.ToDateTime("2008年8月7日"),
Convert.ToDateTime("2008年8月11日"),
Convert.ToDateTime("2008年8月12日"),
Convert.ToDateTime("2008年8月13日"),
Convert.ToDateTime("2008年8月15日"),
Convert.ToDateTime("2008年8月18日"),
Convert.ToDateTime("2008年8月19日"),
Convert.ToDateTime("2008年8月21日"),
Convert.ToDateTime("2008年8月22日"),
Convert.ToDateTime("2008年8月27日"),
Convert.ToDateTime("2008年8月29日") };

int week = 0; //记录某日期是第几周
DateTime t = DateTime.Now; //保存上个日期
bool start = false; //是否重新开始一个周期的计算
foreach (DateTime dt in l)
{
if (!start)
{
Console.WriteLine("开始时间:" + dt.ToString("yyyy年MM月dd日"));
week = GetWeekOfYear(dt);
t = dt;
start = true;
}
else
{
if (dt.CompareTo(t.AddDays(1)) != 0)
{
Console.WriteLine("结束时间:" + t.ToString("yyyy年MM月dd日") + "\r\n");
Console.WriteLine("开始时间:" + dt.ToString("yyyy年MM月dd日"));
week = GetWeekOfYear(dt);
t = dt;
start = true;
continue;
}
if (GetWeekOfYear(dt) == week)
{
t = dt;
continue;
}
Console.WriteLine("结束时间:" + dt.ToString("yyyy年MM月dd日") + "\r\n");
start = false;
}
}
Console.WriteLine("结束时间:" + t.ToString("yyyy年MM月dd日") + "\r\n");
}

private int GetWeekOfYear(DateTime dt)
{
GregorianCalendar gc = new GregorianCalendar();
return gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
}
wdgphc 2008-08-29
  • 打赏
  • 举报
回复
明白了,就是说:

第二个和第一个 日期不连续 就分到两个组里

第二个和第一个 虽然连续,但是属于两个周,就分到两个组里

第二个和第一个 中间有假日,就分到两个组里
其他
分到一个组里;

但是,你的list中有没有 周六周日或假日,如果没有好办(不就自然分组了吗?),如果有如何处理?
eceg 2008-08-29
  • 打赏
  • 举报
回复
可能是我没说清楚,我就是要把它划成时间段.
比如8.1,8.8都是周五,而它们不在同一周里,中间全是休假,时间段就为2个
wdgphc 2008-08-29
  • 打赏
  • 举报
回复
那你就foreach从头开始取第一个记为开始,往后找,找到第一个时间段的尾,记为结束时候,指针++,记为开始,继续找结束... ...
eceg 2008-08-29
  • 打赏
  • 举报
回复
现在卡住了,尤其是不在同一周的周1和周5和日期开始的第一天和最后一天
jinjazz 2008-08-29
  • 打赏
  • 举报
回复
这个东西实现很容易,主要是你的逻辑上清楚
eceg 2008-08-29
  • 打赏
  • 举报
回复
在两个大的日期段中,去掉所有节假日(包括特殊),并将工作日写入数据库字段,如开始时间-结束时间
每周一到周五是一个时间段,但其中周三放假,时间段就为
周一到周二
周四到五
我姓区不姓区 2008-08-29
  • 打赏
  • 举报
回复
划分标准是什么

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧