using System; using System.Diagnostics; using System.Globalization; namespace StartOfCurrentWeek { class Program { static void Main(string[] args) { // monday result DateTimeFormatInfo fi = new CultureInfo("nl-NL").DateTimeFormat; DateTime mondayResult = new DateTime(2008, 4, 28); DateTime test1 = StartOfWeek(new DateTime(2008, 5, 4), fi); Debug.Assert(test1.Date == mondayResult.Date); DateTime test2 = StartOfWeek(new DateTime(2008, 4, 28), fi); Debug.Assert(test2.Date == mondayResult.Date); DateTime test3 = StartOfWeek(new DateTime(2008, 4, 29), fi); Debug.Assert(test3.Date == mondayResult.Date); DateTime test4 = StartOfWeek(new DateTime(2008, 4, 30), fi); Debug.Assert(test4.Date == mondayResult.Date); DateTime test5 = StartOfWeek(new DateTime(2008, 5, 1), fi); Debug.Assert(test5.Date == mondayResult.Date); DateTime test6 = StartOfWeek(new DateTime(2008, 5, 2), fi); Debug.Assert(test6.Date == mondayResult.Date); DateTime test7 = StartOfWeek(new DateTime(2008, 5, 3), fi); Debug.Assert(test7.Date == mondayResult.Date); // sunday result DateTimeFormatInfo fi2 = new CultureInfo("en-US").DateTimeFormat; DateTime sundayResult = new DateTime(2008, 4, 27); DateTime test8 = StartOfWeek(new DateTime(2008, 4, 27), fi2); Debug.Assert(test8.Date == sundayResult.Date); DateTime test9 = StartOfWeek(new DateTime(2008, 4, 28), fi2); Debug.Assert(test9.Date == sundayResult.Date); DateTime test10 = StartOfWeek(new DateTime(2008, 4, 29), fi2); Debug.Assert(test10.Date == sundayResult.Date); DateTime test11 = StartOfWeek(new DateTime(2008, 4, 30), fi2); Debug.Assert(test11.Date == sundayResult.Date); DateTime test12 = StartOfWeek(new DateTime(2008, 5, 1), fi2); Debug.Assert(test12.Date == sundayResult.Date); DateTime test13 = StartOfWeek(new DateTime(2008, 5, 2), fi2); Debug.Assert(test13.Date == sundayResult.Date); DateTime test14 = StartOfWeek(new DateTime(2008, 5, 3), fi2); Debug.Assert(test14.Date == sundayResult.Date); } public static DateTime StartOfWeek(DateTime date, DateTimeFormatInfo dateTimeFormat) { Debug.Assert(dateTimeFormat != null, "dateTimeFormat != null"); if (dateTimeFormat == null) { throw new ArgumentNullException("dateTimeFormat"); } DayOfWeek currentDay = date.DayOfWeek; DayOfWeek firstDay = dateTimeFormat.FirstDayOfWeek; int difference = (int)firstDay - (int)currentDay; // we always have to move back, // since we're interested in the first day of the week if (difference > 0) { difference -= 7; } return date.AddDays(difference); } } }