Naveen Kumar
Naveen Kumar

Reputation: 13

how to dynamically create array of a week days in C#?

Instead of specifying "string[] week_Days = {"Monday", "Tuesday"...};"

How to dynamically set days as array?

I tried solving it, but couldn't get starting day as "Sunday" -

DateTime days = DateTime.Now;  
string[] weekDays = new string[7];  
for (int i = 0; i < weekDays.Length; i++)  
  {  
    weekDays[i] = string.Format("{0:dddd}", days.AddDays(i));  
    Console.WriteLine(weekDays[i]);     
    days = DateTime.Now;  
  }

Output -

Wednesday  
Thursday  
Friday  
Saturday  
Sunday  
Monday  
Tuesday

Upvotes: 1

Views: 4385

Answers (6)

using System;
using System.Globalization;

static void Main()
{
    string[] weekDays = new CultureInfo("en-us").DateTimeFormat.DayNames;
    for (int i = 1; i <= 7; i++)
        Console.WriteLine(weekDays[i % 7]);
}

Upvotes: 3

Coder
Coder

Reputation: 1

This could be done in this way too. Until you get "Monday", add days to the DateTime.Now.

int j = 0;
string[] weekDays = new string[7];
DateTime days = DateTime.Now;

while (weekDays[0] != "Sunday")
{ 
    days = days.AddDays(j++);
    weekDays[0] = string.Format("{0:dddd}", days);
    if (weekDays[0] != "Sunday")
       days = DateTime.Now;  
}

for (int i = 0; i < weekDays.Length; i++)
{
    weekDays[i] = string.Format("{0:dddd}", days.AddDays(i));
    Console.WriteLine(weekDays[i]);   
}

Upvotes: 0

kaffekopp
kaffekopp

Reputation: 2619

You could use the DayOfWeek enum:

string[] weekdays = Enum.GetNames(typeof(DayOfWeek));

EDIT: If you need to change the start day of the week:

private static string[] GetWeekdays(DayOfWeek firstDayOfWeek)
{
    string[] weekdays = new string[7];
    DateTime dateTime = DateTime.Now;
    while (dateTime.DayOfWeek != firstDayOfWeek)
    {
        // Find the next date with start day of week
        dateTime = dateTime.AddDays(1); 
    }
    for (int i = 0; i < 7; i++)
    {
        // Get day of week of current day, add 1 day, iterate 7 times.
        weekdays[i] = dateTime.DayOfWeek.ToString();
        dateTime = dateTime.AddDays(1);
    }
    return weekdays;
}

Upvotes: 2

Tim Schmelter
Tim Schmelter

Reputation: 460138

You can use this LINQ query. The only challenge is to get the correct order:

DayOfWeek firstWeekDay = DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek;
string[] weekDays = Enum.GetValues(typeof(DayOfWeek)).Cast<DayOfWeek>()
   .OrderBy(dow => dow < firstWeekDay ? 7-(int)dow : dow-firstWeekDay)
   .Select(dow => dow.ToString())
   .ToArray();

Maybe someone has a more elegant way than this OrderBy.

Upvotes: 1

adjan
adjan

Reputation: 13652

Your code fails because DateTime.Now isn't always on a sunday:

DateTime days = DateTime.Now;  

Better use the existing DayOfWeek enum:

 string[] weekdays = Enum.GetNames(typeof(DayOfWeek));

Upvotes: 0

Coder
Coder

Reputation: 1

string[] week_Days = new string[7];  
DayOfWeek day = DayOfWeek.Sunday;  
for (int i = 0; i < week_Days.Length; i++)  
 {  
    week_Days[i] = day.ToString();  
    Console.WriteLine(week_Days[i]);  
    day++;  
 }  

Instead of assigning DateTime property, Use DayOfWeek. it solves the issue with ease.

Upvotes: 0

Related Questions