2010-03-25 3 views
0

Existe-t-il une exception Java pour intercepter un objet Date invalide? J'essaie de l'utiliser dans la méthode suivante, mais je ne sais pas quel type d'exception rechercher. Est-ce une ParseException?Java Gestion des exceptions de date try catch

public boolean setDate(Date date) { 
     this.date = date;     
     return true; 
    } 

Répondre

3

Dans la méthode que vous fournissez, il n'y a aucun moyen d'intercepter une exception, car aucun ne sera généré par l'affectation simple. Tout ce que vous pouvez faire est peut-être le changement ci-dessous:

if(date == null) return false; 

Mais ce n'est pas gracieux. Vous pouvez faire quelque chose avec this.date ou lancer une exception si c'est le comportement désiré.

Ce que vous cherchez vraiment est:

  1. ParseException - jeté par un objet DateFormat lorsqu'il tente de parse(), ce qui se passerait avant votre méthode set
  2. IllegalArgumentException - lancée par un constructeur SimpleDateFormat, encore une fois cela arriverait avant votre méthode set. Indique que vous avez fourni une chaîne de format non valide.

Vous voudriez attraper un de ceux-là (probablement n ° 1). Mais il doit arriver avant votre appel de méthode. Une fois que vous avez un objet Date, il est soit null ou valide.

2

Dans cette méthode, vous n'avez pas à vous soucier d'une exception. La date est déjà créée au moment où vous entrez dans cette méthode. Si vous analysez une date, cela aurait été fait en dehors de ce code. Le mieux que vous puissiez faire est de vous assurer que la date n'est pas nulle.

3

Ceci n'est peut-être pas associé à la question originale. Mais vous devez remarquer le nom de la méthode, qui est setDate(). Pensez-vous qu'il semble que ça va retourner quelque chose? Ou alors, pensez-vous que c'est une bonne idée d'y retourner un boolean? OMI, faire quelque chose comme ceci,

public void setDate(Date date) { 
    this.date = date;     
} 

public boolean isDateNull() { // or something 
    return this.date == null;     
} 
2

Cela dépend de ce que vous entendez par une date invalide. Vouliez-vous nous donner une signature de méthode qui ressemblait plus à ceci?

public void setDate(String date) throws ParseException { 
    this.date = SomeDateFormat.getInstance().format(date); 
} 

Sinon, comme les autres ont déclaré le simple fait d'assigner un objet date Java à un champ ne devrait pas être exceptionnel car il est soit une instance de date déjà, ou nulle.

Si vous essayez simplement d'analyser une chaîne en java.util.Date, regardez DateFormat, FastDateFormat (apache, thread safe) ou Joda Time.