并且&或if语句中的运算符

时间:2013-11-22 17:44:06

标签: c# if-statement logical-operators

我制作了一个显示你的DoB的出生日期计划,它也会考虑到闰年,所以如果你输入1995年,第2个月,第29天的年份,它将通过错误,因为它不是闰年。它还需要每个月有多少天,这是我需要帮助的部分。目前,情况就是如此:

           if (month == 1 / && day > 31)
            {
                Console.WriteLine("January only has 31 days - Enter again");
                validDay = false;
            }
            else if (day >= 29 && !IsLeapYear(year) && month == 2)
            {
                Console.WriteLine("You were not born on a leap year or February only has 28 days - Enter again");
                validDay = false;
            }
           //And so on for each month

所以我接着尝试了这样:

if (month == 1 || month == 3 || month == 5 || month == 7 || 
                month == 8 || month == 10 || month == 12 && day > 31)
            {
                Console.WriteLine("Your birth month only has 31 days - Enter again");
                validDay = false;
            }
            else if (day >= 29 && !IsLeapYear(year) && month == 2)
            {
                Console.WriteLine("You were not born on a leap year or February only has 28 days - Enter again");
                validDay = false;
            }
            else if (month == 3 || month == 6 || month == 9 || month == 11 && day > 30)
            {
                Console.WriteLine("Your birth month only has 30 days - Enter again");
                validDay = false;
            }

由于某种原因,即使您输入1997,5,28,它也总是会抛出错误信息。在5中选择的月份但是当天不是> 31为什么这样做呢?我也采取不同的方式来做到这一点,因为我有一种感觉还有另一种方式 - 阵列可能吗?

5 个答案:

答案 0 :(得分:9)

尝试添加一些括号

if ((month == 1 || month == 3 || month == 5 || month == 7 || 
month == 8 || month == 10 || month == 12) && day > 31)

没有parethesis,最后&&仅指上个月。

您还可以使用DateTime构造函数并查看它是否抛出异常 (http://msdn.microsoft.com/en-us/library/xcfzdy4x(v=vs.110).aspx)或使用DateTime.TryParse。

答案 1 :(得分:1)

我建议您使用 DateTime.TryParse - 它会自动验证所有日期,然后您可以向用户返回类似“无效日期”的内容。

答案 2 :(得分:0)

运营商有一种名为precedence order的东西。 尝试使用括号以达到您希望实现的优先级。

答案 3 :(得分:0)

为什么不使用DateTime.TryParse。

请查看以下链接:

Validating Date (Leap year or not) before inserting into Database

Validate a DateTime in C#

答案 4 :(得分:0)

我建议使用DateTime.TryParseExact,如下所示......

string year = "1997";
string month = "5";
string day = "28";
string dateText = string.Format("{0}/{1}/{3}", year, month, day);
DateTime date;

if (!DateTime.TryParseExact(dateText, "yyyy/MM/dd", null, DateTimeStyles.None, out date))
{
    Console.WriteLine("Date is invalid");
}

祝你好运!