2016-08-16 91 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

相關問題