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
FirstDayOfWeekUtility
05.
{
06.
///
07.
/// Returns the first day of the week that the specified
08.
/// 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 date
18.
/// 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.
}
Комментариев нет:
Отправить комментарий