做作业的时候遇到了需要检查日期是否合法的问题,在此用不同的语言写了一个简单以三个整数作为参数的检查日期合法性的函数。
C/C++:
bool IsValidDate(int year, int month, int day)
{
if(month > 12 || month < 1)
return false;
if(day > 31 || day < 1)
return false;
bool is31Month = month == 1 || month == 3 ||
month == 5 || month == 7 || month == 8 ||
month == 10 || month == 12;
if (!is31Month && day >= 31)
return false;
bool isOddYear = (year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0;
if(month == 2)
{
if(isOddYear)
{
if(day > 29)
return false;
}
else
{
if(day >= 29)
return false;
}
}
return true;
}
对于C语言,需要添加以下代码
#define true 1
#define false 0
typedef bool int;
Java:
public static boolean IsValidDate(int year, int month, int day)
{
if(month > 12 || month < 1)
return false;
if(day > 31 || day < 1)
return false;
boolean is31Month = month == 1 || month == 3 ||
month == 5 || month == 7 || month == 8 ||
month == 10 || month == 12;
if (!is31Month && day == 31)
return false;
boolean isOddYear = (year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0;
if(month == 2)
{
if(isOddYear)
return day <= 29;
else
return day < 29;
}
return true;
}
C#:
public static bool IsValidDate(int year, int month, int day)
{
if(month > 12 || month < 1)
return false;
if(day > 31 || day < 1)
return false;
bool is31Month = month == 1 || month == 3 ||
month == 5 || month == 7 || month == 8 ||
month == 10 || month == 12;
if (!is31Month && day >= 31)
return false;
bool isOddYear = (year % 4 == 0 && year % 100 != 0)
|| year % 400 == 0;
if(month == 2)
{
if(isOddYear)
{
if(day > 29)
return false;
}
else
{
if(day >= 29)
return false;
}
}
return true;
}
Python:
def is_valid_date(year, month, day):
if month > 12 | month < 1:
return False
if day > 31 | day < 1:
return False
is_31_month = \
month == 1 | month == 3 | \
month == 5 | month == 7 | month == 8 | \
month == 10 | month == 12
if (not is_31_month) and (day == 31):
return False
is_odd_year = \
(year % 4 == 0 & year % 100 != 0) | year % 400 == 0
if month == 2:
if is_odd_year:
return day <= 29
else:
return day < 29
return True