我制作了一个显示你的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为什么这样做呢?我也采取不同的方式来做到这一点,因为我有一种感觉还有另一种方式 - 阵列可能吗?
答案 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)
答案 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");
}
祝你好运!