获取一年的周列表 – 包含日期

我一直在绞尽脑汁,但是星期五已经很晚了,我会围成一圈。

我需要为下拉列表创建一个工作周列表,并将周数作为值。 所以代码会输出:

8月22日星期一 – 9月26日星期五
8月29日星期一 – 9月2日星期五
9月5日周一至9月9日周五

等等..

整整一年。 任何想法我将如何实现这一目标?

谢谢。

我认为下面的代码符合ISO 8601 :

var jan1 = new DateTime(DateTime.Today.Year , 1, 1); //beware different cultures, see other answers var startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek)); var weeks= Enumerable .Range(0,54) .Select(i => new { weekStart = startOfFirstWeek.AddDays(i * 7) }) .TakeWhile(x => x.weekStart.Year <= jan1.Year) .Select(x => new { x.weekStart, weekFinish=x.weekStart.AddDays(4) }) .SkipWhile(x => x.weekFinish < jan1.AddDays(1) ) .Select((x,i) => new { x.weekStart, x.weekFinish, weekNum=i+1 }); 

请记住,那个星期的计算在不同的文化中是不同的,如果你看到第53周,就没有错误!

 using System.Globalization; CultureInfo cultInfo = CultureInfo.CurrentCulture; int weekNumNow = cultInfo.Calendar.GetWeekOfYear(DateTime.Now, cultInfo.DateTimeFormat.CalendarWeekRule, cultInfo.DateTimeFormat.FirstDayOfWeek); 

只是更新Spender放的内容,因为我想让你的Datetimes输出更符合你想要的。

 DateTime jan1 = new DateTime(DateTime.Today.Year, 1, 1); //beware different cultures, see other answers DateTime startOfFirstWeek = jan1.AddDays(1 - (int)(jan1.DayOfWeek)); var weeks= Enumerable .Range(0,54) .Select(i => new { weekStart = startOfFirstWeek.AddDays(i * 7) }) .TakeWhile(x => x.weekStart.Year <= jan1.Year) .Select(x => new { x.weekStart, weekFinish=x.weekStart.AddDays(4) }) .SkipWhile(x => x.weekFinish.Year < jan1.Year) .Select((x,i) => new { WeekStart = x.weekStart.ToString("dddd, d, MMMM"), WeekFinish = x.weekFinish.ToString("dddd, d, MMMM"), weekNum=i+1 }); 

将格式更正为所需内容的更改是在匿名对象的最后一个选择中。

您可能需要稍微调整一下,但它应该可以满足您的需求:

 static void Main(string[] args) { List weeks = new List(); DateTime beginDate = new DateTime(2011, 01, 01); DateTime endDate = new DateTime(2012, 01, 01); DateTime monday = DateTime.Today; DateTime friday = DateTime.Today; while (beginDate < endDate) { beginDate = beginDate.AddDays(1); if (beginDate.DayOfWeek == DayOfWeek.Monday) { monday = beginDate; } else if (beginDate.DayOfWeek == DayOfWeek.Friday) { friday = beginDate; } else if (beginDate.DayOfWeek == DayOfWeek.Saturday) { weeks.Add(new DateTime[] { monday, friday }); } } for (int x = 0; x < weeks.Count; x++) { Console.WriteLine(weeks[x][0].Date.ToShortDateString() + " - " + weeks[x][1].Date.ToShortDateString()); } Console.ReadLine(); } 

您可以使用.NET时间段库的Week类:

 DateTime start = DateTime.Now.Date; DatTime end = start.AddYears( 1 ); Week week = new Week( start ); while ( week.Start < end ) { Console.WriteLine( "week " + week ); week = week.GetNextWeek(); }