I recently found myself having a DateTime value and needing to calculate the date of the first day in the week that my known date was in using C#. While this is one of those things that are pretty simple to do once you know the solution it did take me a couple of hours to get it right. It turns out that something as simple as calculating a the first day of a week is trickier than one might expect, at least if we want a solution that works for all cultures.
My first instinct was to calculate the first day of a week by subtracting dayInWeek.DayOfWeek - firstDayInWeek days from dayInWeek where dayInWeek is a DateTime specifying a date in the week. That worked fine as long as I did the calculations in an environment where the culture was English, where the first day of the week is Sunday which is enumerated as 0 in DayOfWeek (against international standards which says the first day of the week is monday). As I shifted to using a Swedish culture it broke down and I had to find a better solution.
Heres what I finally came up with:
01.using System;02.using System.Globalization;03. 04.public static class FirstDayOfWeekUtility05.{06./// 07./// Returns the first day of the week that the specified08./// date is in using the current culture.09./// 10.public static DateTime GetFirstDayOfWeek(DateTime dayInWeek)11.{12.CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture;13.return GetFirstDateOfWeek(dayInWeek, defaultCultureInfo);14.}15. 16./// 17./// Returns the first day of the week that the specified date18./// is in.19./// 20.public static DateTime GetFirstDayOfWeek(DateTime dayInWeek, CultureInfo cultureInfo)21.{22.DayOfWeek firstDay = cultureInfo.DateTimeFormat.FirstDayOfWeek;23.DateTime firstDayInWeek = dayInWeek.Date;24.while (firstDayInWeek.DayOfWeek != firstDay)25.firstDayInWeek = firstDayInWeek.AddDays(-1);26. 27.return firstDayInWeek;28.}29.}
Комментариев нет:
Отправить комментарий