Mick
Mick

Reputation: 727

C#: DateTime.DayOfWeek to string comparison

This code is a simplified version of what I'm trying to do:

string day = Thursday;
DateTime dt = DateTime.Now;

if (day == dt.DayOfWeek)
{
     // start the program
}

I need to read a day of the week value from a database, assign it to a string, then compare the string to dt.DayOfWeek to check if the program should execute.

My error is this: "Operator '==' cannot be applied to operands of type 'string' and 'System.DayOfWeek"

Anyone know how to compare a string to a DateTime.DayOfWeek value?

Upvotes: 13

Views: 30847

Answers (4)

Alexei Levenkov
Alexei Levenkov

Reputation: 100620

Easiest is to convert enum to string:

if (day == dt.DayOfWeek.ToString())...

Notes:

  • if you can change type of day to DayOfWeek enum you can avoid string comparisons (and its related localization/comparison issues).
  • if you have to use string make sure to decide if case is important or not (i.e. should "thursday" be equal to DayOfWeek.Thursday) and use corresponding String.Equals method.
  • consider converting string to enum with Parse as suggested in other answers: ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • make sure incoming string is always English - if it could be in other languages you'll need to look into manually matching value to one provided in CultureInfo.DateTimeFormat.DayNames.

Upvotes: 19

Tim Schmelter
Tim Schmelter

Reputation: 460288

You can use Enum.TryParse<DayOfWeek>:

string strDay = "Wednesday";
DayOfWeek day;
if (Enum.TryParse<DayOfWeek>(strDay, out day)
    && day == DateTime.Today.DayOfWeek)
{
    // ...
}

Upvotes: 2

McGarnagle
McGarnagle

Reputation: 102793

Use Enum.Parse to get the Enum value:

if ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day) == dt.DayOfWeek)

If you're not sure it's a valid value, there's TryParse<T>:

Enum val;
if (Enum.TryParse<DayOfWeek>(day, out val) && val == dt.DayOfWeek)

Upvotes: 17

L.B
L.B

Reputation: 116178

Try DayOfWeek day = DayOfWeek.Thursday;

Upvotes: 4

Related Questions