日期:2014-05-18  浏览次数:20483 次

如何去2007年1-12月份的第1,2,3,4周的日期范围(星期一开始)



就是让客户选择年份,月份,的几周,然后计算周的日期范围(星期一开始)

比如:
如何去2007年7月份的第1周的日期范围(星期一开始)

------解决方案--------------------
整个net自带的日历控件省事。
------解决方案--------------------
jf
------解决方案--------------------
没搞懂什么意思!
------解决方案--------------------
比较麻烦,一周会跨月份
------解决方案--------------------
得到1月1日的星期数,以星期日减之得到差值,AddDays差值可以得到第一周结束日期
其他的往后推即可~
------解决方案--------------------
他选择了起始日期你给他加7天不行吗
------解决方案--------------------
使用Calendar myCal = CultureInfo.InvariantCulture.Calendar;应该能满足楼主的需求,具体怎么算,楼主就自己看看吧!!!
------解决方案--------------------
第一周,很可能就没有周一啊?
------解决方案--------------------

DateTime dt = Convert.ToDateTime(sYear + "- " + sMonth + "- " + Convert.ToString(Convert.ToInt32(sWeek)*7));
begindate = dt.AddDays(0 - (int)dt.DayOfWeek);
enddate = dt.AddDays(7 - (int)dt.DayOfWeek);
------解决方案--------------------
哎,又是一个算法问题,不解。
------解决方案--------------------
比如7月1日是星期日,那么七月的第一周是指6.25-7.1呢,还是7.2-7.8
-------------------------------
高手会给你思路,没时间给你写代码,我想写写学习一下,你却不回答我的问题。。。


//返回第index周的周一日期
//参数说明:
//year:年份,month:月份;index:周数
private DateTime GetStartWeekOfMonth(int year, int month, int index)
{
DateTime startMonth = new DateTime(year, month, 1);
DateTime endMonth = startMonth.AddMonths(1).AddDays(-1);
int dayOfWeek = 7;
if(Convert.ToInt32(startMonth.DayOfWeek.ToString( "d "))> 0)
dayOfWeek = Convert.ToInt32(startMonth.DayOfWeek.ToString( "d "));
DateTime startWeek = startMonth.AddDays(1 - dayOfWeek);
DateTime startDayOfWeeks = startWeek.AddDays((index - 1) * 7);
if ((startDayOfWeeks - startMonth.AddMonths(1)).Days > 0)
{
MessageBox.Show( "输入周数大于本月最大周数 ");
return DateTime .MinValue;
}
return startDayOfWeeks ;
}

以上方法返回的是第index周的周一日期,AddDays(7)就是周日日期了,这里假定7月第一周为6.25-7.1

当然,判断year,month的合法性,以及在调用时判断是否为DateTime.MinValue这些细节问题,自己处理一下吧