从周数计算日期

从周数计算日期

任何人都知道一个简单的方法来获得一周中的第一天的日期(在欧洲的星期一)。我知道年份和周数?我要用C#来做这个。



长风秋雁
浏览 523回答 3
3回答

翻翻过去那场雪

我对@HenkHolterman的解决方案有异议,甚至对@RobinAndersson的解决方案也有异议。阅读ISO 8601标准很好地解决了这个问题。把第一个星期四作为目标,而不是星期一。下面的代码也适用于2009年的第53周。public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear){     DateTime jan1 = new DateTime(year, 1, 1);     int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;     // Use first Thursday in January to get first week of the year as     // it will never be in Week 52/53     DateTime firstThursday = jan1.AddDays(daysOffset);     var cal = CultureInfo.CurrentCulture.Calendar;     int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);     var weekNum = weekOfYear;     // As we're adding days to a date in Week 1,     // we need to subtract 1 in order to get the right date for week #1     if (firstWeek == 1)     {         weekNum -= 1;     }     // Using the first Thursday as starting week ensures that we are starting in the right year     // then we add number of weeks multiplied with days     var result = firstThursday.AddDays(weekNum * 7);     // Subtract 3 days from Thursday to get Monday, which is the first weekday in ISO8601     return result.AddDays(-3);}

弑天下

最简单的方法可能是找到一年中的第一个星期一,然后加上相关的周数。这是一些示例代码。顺便说一句,它假设一个星期数从1开始:using System;class Test{     static void Main()     {         // Show the third Tuesday in 2009. Should be January 20th         Console.WriteLine(YearWeekDayToDateTime(2009, DayOfWeek.Tuesday, 3));     }     static DateTime YearWeekDayToDateTime(int year, DayOfWeek day, int week)     {         DateTime startOfYear = new DateTime (year, 1, 1);         // The +7 and %7 stuff is to avoid negative numbers etc.         int daysToFirstCorrectDay = (((int)day - (int)startOfYear.DayOfWeek) + 7) % 7;         return startOfYear.AddDays(7 * (week-1) + daysToFirstCorrectDay);     }}
打开App,查看更多内容
随时随地看视频慕课网APP