新文章 网摘 文章 随笔 日记

计算自定义的一年第几周

        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;
        }

 

posted @ 2022-06-08 08:08  岭南春  阅读(31)  评论(0)    收藏  举报