3

My paradoxical or perhaps trivial problem is to create me a list of the days in format DD - MM - YY from the date of today . Suppose we have today is the " 11/04/2015 " ok ? I would be interested to create a list of datetime that starts exactly from Monday, 02.11.2015 to Sunday, 08.11.2015 . How is this possible? I thought initially :

DateTime today = new DateTime.Now;

int posDayOfWeek = (int)today.DayOfWeek;

if (posDayOfWeek < 7 && posDayOfWeek > 1)
{
    // And from there a black hole in my brain ....
}

I do not really know how to do ....

Thank you cordially Cristian Capannini

leppie
  • 112,162
  • 17
  • 191
  • 293

3 Answers3

11

Assuming you always want Monday to Sunday, you just need something like:

DateTime today = DateTime.Today;
int currentDayOfWeek = (int) today.DayOfWeek;
DateTime sunday = today.AddDays(-currentDayOfWeek);
DateTime monday = sunday.AddDays(1);
// If we started on Sunday, we should actually have gone *back*
// 6 days instead of forward 1...
if (currentDayOfWeek == 0)
{
    monday = monday.AddDays(-7);
}
var dates = Enumerable.Range(0, 7).Select(days => monday.AddDays(days)).ToList();
Jon Skeet
  • 1,335,956
  • 823
  • 8,931
  • 9,049
2

Just use this:

DayOfWeek[] days = { 
    DayOfWeek.Sunday, 
    DayOfWeek.Monday, 
    DayOfWeek.Tuesday, 
    DayOfWeek.Wednesday, 
    DayOfWeek.Thursday, 
    DayOfWeek.Friday, 
    DayOfWeek.Saturday };

It's simple. It's clear. And I've already typed it out for you.

user2023861
  • 7,542
  • 7
  • 52
  • 80
0

Searching the web for something similar, I found this question/answer thread and expanded to create a sort order based on day of the week starting with yesterday:

//create a sort order that starts yesterday
DateTime orderStartDate = DateTime.Today.AddDays(-1);
List<int> sortOrder = Enumerable.Range(0,7).Select(days => (int)orderStartDate.AddDays(days).DayOfWeek).ToList();

//sort collection using the index of the sortOrder
collection.AddRange(list.OrderBy(list  => sortOrder.FindIndex(days => day == list.TargetDay)));
glennsl
  • 25,730
  • 12
  • 57
  • 71