C# 獲取當前日期當年的周數


這幾天跨年,項目上遇到了一個周數計算的問題。

2016年的元旦是周五開始的,之前系統計算的是屬於15年的第53個周,但是年份已經到了16年了。

公司要求從1月1號周五開始算作16年的第一個周,今天1月4號也就是周一,開始算作16年的第二個周。

第一件事先百度,看看有沒有現成的輪子,但是百度出來的都有問題。然后自己找了個案例修改了下。

網上的解決方案是這樣子的。

        //一.找到第一周的最后一天(先獲取1月1日是星期幾,從而得知第一周周末是幾)
            int firstWeekend=7-Convert.ToInt32(DateTime.Parse(DateTime.Today.Year + "-1-1").DayOfWeek);
            
            //二.獲取今天是一年當中的第幾天
            int currentDay = DateTime.Today.DayOfYear;
            //三.(今天 減去 第一周周末)/7 等於 距第一周有多少周 再加上第一周的1 就是今天是今年的第幾周了
            //    剛好考慮了惟一的特殊情況就是,今天剛好在第一周內,那么距第一周就是0 再加上第一周的1 最后還是1
            return Convert.ToInt32(Math.Ceiling((currentDay - firstWeekend) / 7.0)) + 1;

2016年還沒問題,但是到了2017年1月1號,那天剛好是周日,就開始算錯了。

然后稍微做了修改,之后是這樣。

 

       var dt = new DateTime(2017, 01, 01);
            //找到今年的第一天是周幾
            int firstWeekend = Convert.ToInt32(DateTime.Parse(dt.Year + "-1-1").DayOfWeek);

            //獲取第一周的差額,如果是周日,則firstWeekend為0,第一周也就是從周天開始的。
            int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);

            //獲取今天是一年當中的第幾天
            int currentDay = dt.DayOfYear;

            //(今天 減去 第一周周末)/7 等於 距第一周有多少周 再加上第一周的1 就是今天是今年的第幾周了
            //    剛好考慮了惟一的特殊情況就是,今天剛好在第一周內,那么距第一周就是0 再加上第一周的1 最后還是1
            int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;

 

計算正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM