最近有一個(gè)項(xiàng)目要用到年份周期,用于數(shù)據(jù)統(tǒng)計(jì)圖表展示使用,當(dāng)中用到年份周期,以及年份周期所在的日期范圍。當(dāng)初設(shè)想通過(guò)已知數(shù)據(jù)來(lái)?yè)Q算年份周期,經(jīng)過(guò)搜索資料發(fā)現(xiàn)通過(guò)數(shù)據(jù)庫(kù)SQL語(yǔ)句來(lái)做,反而更加復(fù)雜。現(xiàn)在改變思路通過(guò)C#后臺(tái)代碼來(lái)算出兩段日期范圍中年份周期,在依據(jù)年份周期所對(duì)應(yīng)的日期范圍進(jìn)行數(shù)據(jù)庫(kù)查詢(xún)進(jìn)行統(tǒng)計(jì)。需要解決以下兩個(gè)點(diǎn)問(wèn)題,
第一點(diǎn):依據(jù)日期查找所在年份的第幾周;
第二點(diǎn):依據(jù)年份所在的周期計(jì)算出周期所在的日期范圍。
using System;using System.Collections.Generic;using System.Globalization;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication6{ class Program { static void Main(string[] args) { GregorianCalendar gc = new GregorianCalendar(); int weekOfYear = gc.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday); Console.WriteLine("當(dāng)前第{0}周", weekOfYear); DateTime startDate, lastDate; for (int i = 1; i <= 53; i++) { GetDaysOfWeeks(DateTime.Now.Year, i, out startDate, out lastDate); Console.WriteLine("第{0}周", i); Console.WriteLine(startDate); Console.WriteLine(lastDate); } Console.ReadLine(); } public static bool GetDaysOfWeeks(int year, int index, out DateTime first, out DateTime last) { first = DateTime.MinValue; last = DateTime.MinValue; if (year < 1700 || year > 9999) { //"年份超限" return false; } if (index < 1 || index > 53) { //"周數(shù)錯(cuò)誤" return false; } DateTime startDay = new DateTime(year, 1, 1); //該年第一天 DateTime endDay = new DateTime(year + 1, 1, 1).AddMilliseconds(-1); int dayOfWeek = 0; if (Convert.ToInt32(startDay.DayOfWeek.ToString("d")) > 0) dayOfWeek = Convert.ToInt32(startDay.DayOfWeek.ToString("d")); //該年第一天為星期幾 if (dayOfWeek == 0) { dayOfWeek = 7; } if (index == 1) { first = startDay.AddDays(7 - dayOfWeek - 6); if (dayOfWeek == 6) { last = first; } else { last = startDay.AddDays((7 - dayOfWeek)); } } else { first = startDay.AddDays((8 - dayOfWeek) + (index - 2) * 7); //index周的起始日期 last = first.AddDays(6); //if (last > endDay) //{ // last = endDay; //} } if (first > endDay) //startDayOfWeeks不在該年范圍內(nèi) { //"輸入周數(shù)大于本年最大周數(shù)"; return false; } return true; } }}
執(zhí)行結(jié)果
總結(jié)
以上所述是小編給大家介紹的C# 獲取當(dāng)前年份的周期及周期所在日期范圍(推薦),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注