Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C#: DateTime.DayOfWeek to string comparison

Tags:

c#

datetime

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?

like image 360
Mick Avatar asked Dec 04 '12 22:12

Mick


4 Answers

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)
like image 111
McGarnagle Avatar answered Oct 17 '22 22:10

McGarnagle


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.
like image 15
Alexei Levenkov Avatar answered Oct 17 '22 21:10

Alexei Levenkov


Try DayOfWeek day = DayOfWeek.Thursday;

like image 4
L.B Avatar answered Oct 17 '22 21:10

L.B


You can use Enum.TryParse<DayOfWeek>:

string strDay = "Wednesday";
DayOfWeek day;
if (Enum.TryParse<DayOfWeek>(strDay, out day)
    && day == DateTime.Today.DayOfWeek)
{
    // ...
}
like image 2
Tim Schmelter Avatar answered Oct 17 '22 20:10

Tim Schmelter