C#:DateTime.DayOfWeek进行字符串比较

Mic*_*ick 8 c# datetime

这段代码是我正在尝试做的简化版本:

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

if (day == dt.DayOfWeek)
{
     // start the program
}
Run Code Online (Sandbox Code Playgroud)

我需要从数据库中读取星期值,将其分配给字符串,然后将字符串与dt.DayOfWeek进行比较以检查程序是否应该执行.

我的错误是:"运算符'=='不能应用于'string'和'System.DayOfWeek'类型的操作数

任何人都知道如何比较字符串与DateTime.DayOfWeek值?

Ale*_*kov 11

最简单的方法是将枚举转换为字符串:

if (day == dt.DayOfWeek.ToString())...
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 如果你可以改变的类型dayDayOfWeek枚举可以避开字符串比较(及其相关的本地化/比较问题).
  • 如果你必须使用字符串,请确保案件是否重要(即应该"星期四"等于DayOfWeek.Thursday)并使用相应的String.Equals方法.
  • 考虑将字符串转换为枚举,Parse如其他答案所示:((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
  • 确保传入的字符串始终为英语 - 如果它可能是其他语言,则需要考虑手动匹配CultureInfo.DateTimeFormat.DayNames中提供的值.


McG*_*gle 11

使用Enum.Parse来获取枚举值:

if ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day) == dt.DayOfWeek)
Run Code Online (Sandbox Code Playgroud)

如果你不确定它是否是有效值,那么TryParse<T>:

Enum val;
if (Enum.TryParse<DayOfWeek>(day, out val) && val == dt.DayOfWeek)
Run Code Online (Sandbox Code Playgroud)