SimpleDateFormat给出了错误的日期

时间:2016-08-16 12:11:00

标签: java date simpledateformat

我输入的是特定日期(日/月/日),在显示时输出是其他内容。

import java.text.*;
import java.io.*;
import java.util.*;
class InvalidUsernameException extends Exception       //Class InvalidUsernameException
{
    InvalidUsernameException(String s)
    {
        super(s);
    }
}

///////////////////////////////////////////////////////////////////////////////////////////
class InvalidPasswordException extends Exception      //Class InvalidPasswordException
{
    InvalidPasswordException(String s)
    {
        super(s);
    }
}
///////////////////////////////////////////////////////////////////////////////////////////
class InvalidDateException extends Exception      //Class InvalidPasswordException
{
    InvalidDateException(String s)
    {
        super(s);
    }
}

///////////////////////////////////////////////////////////////////////////////////////////
class EmailIdb1                                   //Class Email Id b1
{
    String username, password;
    int domainid;
    Date dt;

    EmailIdb1()
    {
        username = "";
        domainid = 0;
        password = "";
        dt = new Date();
    }


    EmailIdb1(String u, String pwd, int did, int d, int m, int y)
    {
        username = u;
        domainid = did;
        password = pwd;
        dt = new Date(y,m,d);       // I think There is a problem
        SimpleDateFormat formater = new SimpleDateFormat ("yyyy/MM/dd"); //Or there can be a  problem

        try{
            if((username.equals("User")))
            {
                throw new InvalidUsernameException("Invalid Username");
            }
            else if((password.equals("123")))
            {
                throw new InvalidPasswordException("Invalid Password");
            }
            else{
                System.out.println("\nSuccesfully Login on Date : "+formater.format(dt));

            }           
        }
        catch(Exception e)
        {

        }
    }
}


///////////////////////////////////////////////////////////////////////////////////////////
class EmailId                                    //Class Email Id
{
    public static void main(String args[])
    {
        int d,m,y,did;
        String usn,pwd;
        EmailIdb1 eml;

        try{
            usn = args[0];
            pwd = args[1];
            did = Integer.parseInt(args[2]);
            d   = Integer.parseInt(args[3]);
            m   = Integer.parseInt(args[4]);
            y   = Integer.parseInt(args[5]);

            switch(m)
            {
                case 2: if(d==29 && y%4 == 0)
                        {
                            eml = new EmailIdb1(usn,pwd,did,d,m,y);
                        }
                        else if(d<=28 && d>=1)
                        {
                            eml = new EmailIdb1(usn,pwd,did,d,m,y);
                        }
                        else{
                            throw new InvalidDateException("Wrong Date.");
                        }
                        break;

                case 1: case 3: case 5: case 7: case 8: case 10:
                case 12: if(d>=1 && d<=31)
                         {
                            eml = new EmailIdb1(usn,pwd,did,d,m,y);
                         }
                         else
                         {
                             throw new InvalidDateException("Invalid Date");
                         }
                    break;
                case 4: case 6: case 9:
                case 11: if(d>=1 && d<=30)
                         {
                             eml = new EmailIdb1(usn,pwd,did,d,m,y);
                         }
                         else
                         {
                             throw new InvalidDateException("Invalid Date");
                         }
                    break;
                default : throw new InvalidDateException("Invalid Date");
            }


        }
        catch(InvalidDateException ed)
        {
            System.out.println(ed);
        }
    }
}

我和我的两个朋友有类似的问题。不知道为什么会发生这种情况。我的老师也找不到问题所在

输出应该是

Successfully Login on Date : 1994/05/04

输入为

Successfully Login on Date : 3894/06/04

1 个答案:

答案 0 :(得分:2)

首先

      new Date(int year, int month, int date) 

已弃用 - 您不应该使用它

其次,根据javadoc:

/**
 * Allocates a <code>Date</code> object and initializes it so that
 * it represents midnight, local time, at the beginning of the day
 * specified by the <code>year</code>, <code>month</code>, and
 * <code>date</code> arguments.
 *
 * @param   year    the year minus 1900.
 * @param   month   the month between 0-11.
 * @param   date    the day of the month between 1-31.
 * @see     java.util.Calendar
 * @deprecated As of JDK version 1.1,
 * replaced by <code>Calendar.set(year + 1900, month, date)</code>
 * or <code>GregorianCalendar(year + 1900, month, date)</code>.
 */

因此,如果您在1994年通过,您将获得年份为“3894”的日期。如果你想获得“1994”,你应该通过94年。 并且月份在0-11范围内表示为int,因此如果您传递5,则在您的情况下将其格式化为“06”,因为5表示6月而不是5月。