Java合法日期闰年

3

这是我更新后的代码,但它仍然不起作用。对于所有的2月29日情况,它都返回"day",但实际上它只有在闰年时才应该返回"day",如果不是闰年则应该返回1。

public int checkDay (int day)
{
    // For months with 30 days.
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30)
        return day;
    // For months with 31 days.
    if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && (day <= 31))
        return day;
    // For leap years.
    // If February 29th...
    if (month == 2 && day == 29)
    {
        // Check if year is a leap year.
        if ((year%4 == 0 && year%100!=0) || year%400 == 0) 
        {
            // If year is a leap year return day as 29th.
            return day; 
        }
        // If not a leap year, return day as 1st.
        else return 1;
    }
    // If Date if February 1st through 28th return day, as it is valid.
    if (month == 2 && (day >= 1 && day <= 28))
        return day;
// Return day as 1st for all other cases.
return 1;
}

1
如果日期是“1”,这也是无效的吗? - Peter Lawrey
也许你还应该添加 if (day<1) { day=1; } - Axel
顺便说一下,Year::isLeap - Basil Bourque
3个回答

5

1

尝试将您的代码更改为

if (year%4==0&&(year%100!=0&&year%400==0)) 

这将始终将其更改为1,这不是我所需要的,因为2/29/2004是一个有效的日期。 - annaisarobot

0
if ((year%4==0 && year%100!=0) || year%400==0)

这个解决了你的问题,你的逻辑是错误的 :)

尝试这段代码:如果返回的布尔值为false,则可以将日期设置为1,因为日期无效。

public bool checkDay (int day, int month, int year){
    bool valid = false;
    if(day >=1){
        // For months with 30 days.
        if ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30){
            valid = true;
        }
        // For months with 31 days.
        if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day <= 31){
            valid = true;
        }
        // For February.
        if (month == 2)
        {
            if(day <= 28){
                valid = true;
            } else if(day == 29){
                if ((year%4 == 0 && year%100!=0) || year%400 == 0){
                    valid = true;
                } //else invalid
            }
        }
    } //else date is not valid
    return valid;
}

在每个方法中只有一个返回语句是更好的实践。这使得代码更易于理解,从而更容易调试和找到可能的错误。如果您有任何问题,请随时询问。

这仍然不起作用,因为如果我使用2/29/2003运行它,这不是一个有效的日期,它不会像应该一样将29更改为1。 - annaisarobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接