【问题标题】:Java Valid Date Leap YearJava 有效日期闰年
【发布时间】:2013-09-04 07:15:40
【问题描述】:

这是我更新的代码,它仍然不起作用。对于 2 月 29 日的所有情况,它都返回天,当它应该只在闰年时返回天,如果不是闰年,则应该返回 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这也是无效的吗?
  • 或许你也应该加上if (day&lt;1) { day=1; }
  • 顺便说一句,Year::isLeap

标签: java date calendar


【解决方案1】:

试试 GregorianCalendar http://docs.oracle.com/javase/6/docs/api/java/util/GregorianCalendar.html

GregorianCalendar gc = new GregorianCalendar();
if (gc.isLeapYear(year) ) 

【讨论】:

    【解决方案2】:

    尝试将代码更改为

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

    【讨论】:

    • 这将始终将其更改为 1,这不是我需要的,因为 2/29/2004 是有效日期。
    【解决方案3】:
    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;
    }
    

    每个方法中最好只有一个 return 语句。这使得更容易理解代码并通过它来调试它并发现可能的错误。如果您有任何问题,请随时提出。

    【讨论】:

    • 这仍然不起作用,因为如果我在 2003 年 2 月 29 日运行它,这不是一个有效的日子,它不会将 29 更改为 1。
    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2018-08-20
    相关资源
    最近更新 更多