private void button1_Click(object sender, EventArgs e)
{
var date = Convert.ToDateTime(TbxDate.Text);
var firstDayOfWeek = Convert.ToInt32(TbxFirstDayOfWeek.Text);
var x = GetWeek(date, firstDayOfWeek);
LblWeek.Text = $@"第{x}周";
}
/// <summary>
/// 计算自定义的一年第几周
/// </summary>
/// <param name="date">要计算的日期</param>
/// <param name="firstDayOfWeek">一周的第一天是正常的星期几</param>
/// <returns></returns>
private int GetWeek(DateTime date, int firstDayOfWeek)
{
date = date.Date;//去掉时分秒
DateTime firstDateOfYear = new DateTime(date.Year, 1, 1);//一年内的第1天,去掉时分秒
int firstWeek = 1;//第一周
var weekDayOfFirstDateOfYear = DayOfWeekToInt(firstDateOfYear.DayOfWeek);//1月1日是正常的星期几
var dayOffSet = (firstDayOfWeek - 7) - 1;//偏移天数
var temp = weekDayOfFirstDateOfYear - dayOffSet;
int customWeekDayOfFirstDateOfYear;//1月1日是自定义的星期几
if (temp > 7)
{
customWeekDayOfFirstDateOfYear = temp - 7;
}
else
{
customWeekDayOfFirstDateOfYear = temp;
}
DateTime firstDateOfFirstFullWeek = firstDateOfYear.AddDays(7 - customWeekDayOfFirstDateOfYear);//第一个完整周的第一天
var intervalDays = (date - firstDateOfFirstFullWeek).TotalDays;//间隔天数
var cutomWeek = Convert.ToInt32(Math.Ceiling(intervalDays / 7) + firstWeek);
return cutomWeek;
}
/// <summary>
/// 星期几转为第几天
/// </summary>
/// <param name="dayOfWeek"></param>
/// <returns></returns>
private int DayOfWeekToInt(DayOfWeek dayOfWeek)
{
int dayInWeek = 0;
string week = dayOfWeek.ToString();
switch (week)
{
case "Monday":
dayInWeek = 1;
break;
case "Tuesday":
dayInWeek = 2;
break;
case "Wednesday":
dayInWeek = 3;
break;
case "Thursday":
dayInWeek = 4;
break;
case "Friday":
dayInWeek = 5;
break;
case "Saturday":
dayInWeek = 6;
break;
case "Sunday":
dayInWeek = 7;
break;
}
return dayInWeek;
}