2015-06-01 11 views
7

Si consideri il frammento:Impedisci alla data non valida di essere convertita in data del prossimo mese in jdk6?

String dateStr = "Mon Jan 32 00:00:00 IST 2015"; // 32 Jan 2015 

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy"); 
DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy"); 
System.out.println(ddMMyyyy.format(formatter.parse(dateStr))); 

mi dà l'output come

01.02.2015  // Ist February 2015 

desidero evitare che questo per rendere l'utente consapevole sul interfaccia utente che è una data non valida?
Qualche suggerimento?

+1

possibile duplicato di [Come test di integrità una data in java] (http://stackoverflow.com/questions/226910/how-to-sanity-check-a-date-in-java) – Jens

+0

@Jens: Il problema principale è che come ottengo il formato dd.MM.yyyy con la classe Calendar e poi faccio le cose con il metodo setLenient. –

+1

Dove possibile evitare le classi 'Date' java. Usa http://www.joda.org/joda-time/ per Java 7 e versioni precedenti e Java Time in Java 8. – Thirler

risposta

3

L'opzione setLenient() di SimpleDateFormat è ciò che stai cercando.

Dopo aver impostato isLenient su false, accetta solo date correttamente formattate e genera un'eccezione ParseException in altri casi.

String dateStr = "Mon Jan 32 00:00:00 IST 2015"; // 32 Jan 2015 

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy"); 
formatter.setLenient(false); 
DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy"); 
try { 
    System.out.println(ddMMyyyy.format(formatter.parse(dateStr))); 
} catch (ParseException e) { 
    // Your date is invalid 
} 
+2

Se dovesse essere "setLenient (false)' essere rigoroso –

+0

@TimoSta: No, questo non ha funzionato t risolto il problema. Sto ancora ricevendo la stessa risposta. –

+0

@BrettWalker corretto, dovrebbe essere falso – Timo

2

È possibile utilizzare DateFormat.setLenient(boolean) a (dal Javadoc) con rigorosa analisi, gli ingressi devono corrispondere il formato di questo oggetto.

DateFormat ddMMyyyy = new SimpleDateFormat("dd.MM.yyyy"); 
ddMMyyyy.setLenient(false); 
1

Impostare la data formattatore di non essere indulgente ...

DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy"); 
formatter.setLenient(false); 
Problemi correlati