c# 自然周

本文介绍了一个计算指定年份总周数的方法,并详细解释了如何确定某具体日期在其所在年份中的周数。通过分析不同年份的第一天和最后一天,以及考虑平年与闰年的情况,提供了实用的日期计算逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   //根据年份计算该年有多少周

        public static int GetWeekCountOfYear(int strYear)

        {

            DateTime firstDay = DateTime.Parse(strYear.ToString() + "-01-01");

            int weekOfFirstDay = Convert.ToInt32(firstDay.DayOfWeek);//得到该年的第一天是星期几

            int countWeek;//该年有多少周

            //

            //一年最少有53周,最多有54周

            //如果是平年(365),52×7=364,多余1天,故共有53周

            //如果是闰年(366),52×7=364,多余2天:

            ////如果多余的两天分别是年初和年末,则有54周,其他情况均为53周

            //

            if (DateTime.IsLeapYear(strYear) && weekOfFirstDay == 7)

            {//如果该年是闰年且第一天为星期日

                countWeek = 54;

            }

            else

            {

                countWeek = 53;

            }

            return countWeek;

        }

 

        //计算某天在某年的第几周内,且返回这周的起始日期

        public int GetWeekOfCurrDate(DateTime dt)

        {

            int week = 0;//返回的周次

            //获取该年有多少周

            int countWeek = 0;

            countWeek = GetWeekCountOfYear(dt.Year);

 

            //获取该年有多少天

            int countDay = 0;

            if (!DateTime.IsLeapYear(dt.Year))

            {

                //平年

                countDay = 365;

            }

            else

            {

                //闰年

                countDay = 366;

            }

 

            //获取该年第一天是星期几

            int firstDayOfWeek = (int)DateTime.Parse(dt.Year.ToString() + "-01-01").DayOfWeek;

 

            //获取该年最后一天是星期几

            int lastDayOfWeek = (int)DateTime.Parse(dt.Year.ToString() + "-12-31").DayOfWeek;

 

            //获取第一周有多少天

            int countDayOfFirstWeek = 7 - firstDayOfWeek + 1;

 

            //获取最后一周有多少天

            int countDayOfLastWeek = lastDayOfWeek;

 

            //除去第一周和最后一周,该年还剩多少天

            int countDayRemain = countDay - countDayOfFirstWeek - countDayOfLastWeek;

 

            //除去第一周和最后一周,该年还剩多少周

            int countWeekRemain = countDayRemain % 7;

 

            if (dt.DayOfYear <= countDayOfFirstWeek)

            {

                //所求的日期在第一周内

                week = 1;

            }

            else

            {

                if (dt.DayOfYear >= countDay - countDayOfLastWeek)

                {

                    //所求的日期在最后一周内

                    week = countWeek - 2;

                }

                else

                {

                    //判断除去第一周,所求日期是否能被7整除

                    if ((dt.DayOfYear - countDayOfFirstWeek) / 7 == 0)

                    {

                        week = (dt.DayOfYear - countDayOfFirstWeek) / 7 + 1;

                    }

                    else

                    {

                        week = (dt.DayOfYear - countDayOfFirstWeek) / 7 + 2;

                    }

                }

            }

            return week;

        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值