2012-05-15 15 views
6

Ho bisogno di analizzare una data dalla stringa di input utilizzando il modello di data "yyyy-MM-dd", e se la data verrà in qualsiasi altro formato, genera un errore.Analisi errata della data utilizzando SimpleDateFormat, Java

Questo è il mio pezzo di codice in cui ho analizzare la data:

private void validateDate() throws MyException { 
    Date parsedDate; 
    String DATE_FORMAT = "yyyy-MM-dd"; 
    try{ 
    parsedDate = new SimpleDateFormat(DATE_FORMAT).parse(getMyDate()); 
    System.out.println(parsedDate); 
    } catch (ParseException e) { 
    throw new MyException(“Error occurred while processing date:” + getMyDate()); 
    } 

} 

Quando ho stringa come "2011-06-12" come input in myDate mi metterò in uscita "gio 29 settembre 00:00 : 00 EEST 2011 ", che è buono.

Quando ho inviato una stringa errata come "2011-0612", ho ricevuto un errore come previsto.

I problemi iniziano quando sto provando a passare una stringa che ha ancora due "trattini", ma il numero di cifre è sbagliato. Esempio:

stringa di input "2011-06-1211" risultato "mar 23 set 00:00:00 EEST 2014".

stringa di input "2011-1106-12" risultato "lun 12 feb 00:00:00 EET 2103".

Non riesco a modificare il formato di input della data della stringa.

Come posso evitarlo?

+1

Non sono sicuro di come "2011-06-12" come input in myDate otterrò l'output "Gio 29:00 00:00:00 EEST 2011" è buono. Dovresti ricevere il 12 giugno come output - non il 29 settembre ... –

risposta

9

Hai provato a chiamare setLenient(false) sul tuo?

import java.util.*; 
import java.text.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     format.setLenient(false); 
     Date date = format.parse("2011-06-1211"); // Throws... 
     System.out.println(date); 
    } 
} 

Nota che Vorrei anche suggerire l'impostazione del fuso orario e internazionali del SimpleDateFormat. (In alternativa, utilizzare Joda Time invece ...)

+0

Grazie per la tua risposta. Farò eseguire i test e ti darò il feedback. Ma al momento sembra che il problema sia risolto. – AndrewVP

+0

In simpleDateFormat, restituisce sempre il mese sbagliato. Qual è la ragione di ciò? –

+0

@AnandSavjani: No, non è così. Non posso dire cosa stai sbagliando con così poche informazioni, ma 'SimpleDateFormat' funziona abbastanza ragionevolmente. Se pensi che sia rotto, ti suggerisco di fare una nuova domanda con un programma breve ma completo che mostri il problema. –

Problemi correlati