每周按从周一开始,周日结束。
///
<summary>
/// 获取指定月份指定周数的开始日期
/// </summary>
/// <param name="year"> 年份 </param>
/// <param name="month"> 月份 </param>
/// <param name="index"> 周数 </param>
/// <returns></returns>
private DateTime GetStartDayOfWeeks( int year, int month, int index)
{
if (year < 1600 || year > 9999 )
{
MessageBox.Show( " 年份超限 " );
return DateTime .MinValue ;
}
if (month < 0 || month > 12 )
{
MessageBox.Show( " 月份错误 " );
return DateTime .MinValue ;
}
if (index < 1 )
{
MessageBox.Show( " 周数错误 " );
return DateTime.MinValue;
}
DateTime startMonth = new DateTime(year, month, 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); // index周的起始日期
DateTime startDayOfWeeks = startWeek.AddDays(index * 7 ); // index周的起始日期
if ((startDayOfWeeks - startMonth.AddMonths( 1 )).Days > 0 ) // startDayOfWeeks不在该月范围内
{
MessageBox.Show( " 输入周数大于本月最大周数 " );
return DateTime.MinValue;
}
return startDayOfWeeks;
}
/// 获取指定月份指定周数的开始日期
/// </summary>
/// <param name="year"> 年份 </param>
/// <param name="month"> 月份 </param>
/// <param name="index"> 周数 </param>
/// <returns></returns>
private DateTime GetStartDayOfWeeks( int year, int month, int index)
{
if (year < 1600 || year > 9999 )
{
MessageBox.Show( " 年份超限 " );
return DateTime .MinValue ;
}
if (month < 0 || month > 12 )
{
MessageBox.Show( " 月份错误 " );
return DateTime .MinValue ;
}
if (index < 1 )
{
MessageBox.Show( " 周数错误 " );
return DateTime.MinValue;
}
DateTime startMonth = new DateTime(year, month, 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); // index周的起始日期
DateTime startDayOfWeeks = startWeek.AddDays(index * 7 ); // index周的起始日期
if ((startDayOfWeeks - startMonth.AddMonths( 1 )).Days > 0 ) // startDayOfWeeks不在该月范围内
{
MessageBox.Show( " 输入周数大于本月最大周数 " );
return DateTime.MinValue;
}
return startDayOfWeeks;
}
这里根据规则的不同,使用不同的代码,以2007年7月为例,7月1日为星期日
DateTime startDayOfWeeks
=
startWeek.AddDays((index
-
1
)
*
7
);
//
index周的起始日期
这样获取的7月第一周的起始日期为2007-6-25
DateTime startDayOfWeeks
=
startWeek.AddDays(index
*
7
);
//
index周的起始日期
这样获取的7月第一周的起始日期为2007-7-2
在调用时,先判断一下返回值是否为DateTime.MinValue再使用
DateTime start
=
GetStartDayOfWeeks(
2007
,
7
,
1
);
if (start != DateTime.MinValue)
{
MessageBox.Show(start.ToShortDateString());
}
该周的结束日期只要在开始日期基础上加6天就可以了
if (start != DateTime.MinValue)
{
MessageBox.Show(start.ToShortDateString());
}
DateTime end
=
start.AddDays(
6
);
MessageBox.Show(end.ToShortDateString());
MessageBox.Show(end.ToShortDateString());