计算自定义的一年第几周
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; }