views:

50

answers:

1

I want to create a function in C# which for a week number will return me the days, in that week.

For instance for week number 40, how can I get the days: 4/10, 5/10, 6/10, 7/10, 8/10, 9/10, 10/10.

Thank you in advance!

+6  A: 

I think this should do what you want:

    public static DateTime[] WeekDays(int Year, int WeekNumber)
    {
        DateTime start = new DateTime(Year, 1, 1).AddDays(7 * WeekNumber);
        start = start.AddDays(-((int)start.DayOfWeek));
        return Enumerable.Range(0, 7).Select(num => start.AddDays(num)).ToArray();
    }

Although I treat Sunday as first day of week, if you want Monday as first day change range from (0,7) to (1,7).

If you want to conform the ISO standard, I think this should work:

    public static DateTime[] WeekDays(int Year, int WeekNumber)
    {
        DateTime start = new DateTime(Year, 1, 4);
        start = start.AddDays(-((int)start.DayOfWeek));
        start = start.AddDays(7 * (WeekNumber - 1));
        return Enumerable.Range(0, 7).Select(num => start.AddDays(num)).ToArray();
    }
JDunkerley
That basically depends on where in the world you are, because in Europe Week 1 is the first week with 4 days, whereas in US it is the week with 1/1 (http://en.wikipedia.org/wiki/Seven-day_week#Week_numbering) - so code is correct except the "base" might need to be adjusted.
veggerby
As far as I remember from an elder project, the above code will not work when calculating with ISO-Weeks (8601 what is used in europe often) also if the base will be adjusted(see my answer). But maybe this has changed with .net4.
HCL
Yes, you are correct it doesnt follow the ISO standard. Could be adjusted quite easily to fit with the standard. Will put and correction in.
JDunkerley
Thanks, I used another function, but the main idea is the same.
Andrei T. Ursan