C#:DateTime.DayOfWeek进行字符串比较
这段代码是我正在尝试做的简化版本:
string day = Thursday; DateTime dt = DateTime.Now; if (day == dt.DayOfWeek) { // start the program }
我需要从数据库中读取星期值,将其分配给字符串,然后将字符串与dt.DayOfWeek进行比较以检查程序是否应该执行。
我的错误是: “运算符’==’不能应用于’string’和’System.DayOfWeek’类型的操作数
任何人都知道如何比较字符串与DateTime.DayOfWeek值?
最简单的是将枚举转换为字符串:
if (day == dt.DayOfWeek.ToString())...
笔记:
- 如果您可以将日期类型更改为
DayOfWeek
枚举,则可以避免字符串比较(及其相关的本地化/比较问题)。 - 如果你必须使用字符串,请确保判断大小写是否重要(即“星期四”应该等于
DayOfWeek.Thursday
)并使用相应的String.Equals
方法。 - 考虑使用
Parse
将字符串转换为枚举,如其他答案所示:((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day)
- 确保传入的字符串始终为英语 – 如果它可能是其他语言,则需要考虑手动匹配CultureInfo.DateTimeFormat.DayNames中提供的值。
使用Enum.Parse
获取Enum值:
if ((DayOfWeek)Enum.Parse(typeof(DayOfWeek), day) == dt.DayOfWeek)
如果你不确定它是否是有效值,那就是TryParse
:
Enum val; if (Enum.TryParse(day, out val) && val == dt.DayOfWeek)
尝试DayOfWeek day = DayOfWeek.Thursday;
您可以使用Enum.TryParse
:
string strDay = "Wednesday"; DayOfWeek day; if (Enum.TryParse(strDay, out day) && day == DateTime.Today.DayOfWeek) { // ... }