2016-08-16 94 views
-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 
+1

您不应该使用带三个整数的Date构造函数,因为它已被删除 – Jens

+1

您使用SimpleDateFormat函数执行什么操作?此外,空的catch块永远不会被使用。附:你的代码的评论充其量是无益的,并且最坏的情况是_hurt_可读性。 –

+4

阅读文档http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#Date(int,int,int):year - year减去1900. – Jens

回答

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月份。

+0

谢谢,真正的帮助... – Priyank

相关问题