public static void GetWeekOfYear(this DateTime moment, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, WeekOfYearRuleKind weekOfYearRule, out int year, out int weekOfYear) { var yearAndWeek = WeekTool.GetYearAndWeek(moment, culture, weekOfYearRule); year = yearAndWeek.Year ?? 0; weekOfYear = yearAndWeek.Week ?? 0; //culture.ShouldNotBeNull("culture"); //// NOTE: ISO 8601이 FirstFourDayWeek, Monday를 기준으로 하는데 왜 이렇게 하는지 모르겠네? //// //if(weekOfYearRule == WeekOfYearRuleKind.Iso8601 && weekRule == CalendarWeekRule.FirstFourDayWeek && firstDayOfWeek == DayOfWeek.Monday) //{ // // // // NOTE: see http://blogs.msdn.com/b/shawnste/archive/2006/01/24/517178.aspx // // // var day = culture.Calendar.GetDayOfWeek(moment); // if(day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) // { // moment = moment.AddDays(3); // } //} //weekOfYear = culture.Calendar.GetWeekOfYear(moment, weekRule, firstDayOfWeek); //year = moment.Year; //if(weekOfYear >= 52 && moment.Month < 12) //{ // year--; //} }
public void WeekOfYearCalendarTest() { var period = new TimeRange(new DateTime(2007, 12, 31), new DateTime(2009, 12, 31)); var moments = TimeTool.ForEachDays(period) #if !SILVERLIGHT .AsParallel() .AsOrdered() #endif .Select(p => p.Start); foreach (var culture in CultureTestData.Default) { var rule = WeekTool.GetWeekOfYearRuleKind(culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek); if (rule == WeekOfYearRuleKind.Iso8601) { continue; } foreach (var moment in moments) { var calendarWeekOfYear = culture.Calendar.GetWeekOfYear(moment, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek); var yearAndWeek = TimeTool.GetWeekOfYear(moment, culture, WeekOfYearRuleKind.Calendar); Assert.AreEqual(calendarWeekOfYear, yearAndWeek.Week, "calendar WeekOfYear=[{0}], yearAndWeek=[{1}], culture=[{2}], momnent=[{3}], weekRule=[{4}], FirstDayOfWeek=[{5}]", calendarWeekOfYear, yearAndWeek, culture, moment, culture.DateTimeFormat.CalendarWeekRule, culture.DateTimeFormat.FirstDayOfWeek); } } }
public static YearAndWeek GetWeekOfYear(this DateTime moment, CultureInfo culture, CalendarWeekRule weekRule, DayOfWeek firstDayOfWeek, WeekOfYearRuleKind weekOfYearRule) { return(WeekTool.GetYearAndWeek(moment, culture, weekOfYearRule)); }
public static YearAndWeek GetWeekOfYear(this DateTime moment, CultureInfo culture, WeekOfYearRuleKind weekOfYearRule) { return(WeekTool.GetYearAndWeek(moment, culture, weekOfYearRule)); }