-2
我输入特定日期(dd/MM/yyyy),同时显示输出是别的。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
您不应该使用带三个整数的Date构造函数,因为它已被删除 – Jens
您使用SimpleDateFormat函数执行什么操作?此外,空的catch块永远不会被使用。附:你的代码的评论充其量是无益的,并且最坏的情况是_hurt_可读性。 –
阅读文档http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#Date(int,int,int):year - year减去1900. – Jens