2015-04-16 8 views
7

Sto provando a convertire una stringa di data in un oggetto data in java indipendentemente dal formato di data di sistema corrente. Perché voglio ottenere il mio formato di data personalizzato da memorizzare nel database. Quello che segue è il mio codice e per favore mi consigli il modo.Come convertire String to Date in java qualunque sia il formato di sistema è

public static String dateToString(String date){ 
    if(date.equals("")) return ""; 
    if(date == null || date.length() == 0){ 
     return ""; 
    } 
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy"); 
    try { 
     Date l_date = format.parse(date); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTime(l_date); 
     String year = String.format("%04d", calendar.get(Calendar.YEAR)); 
     String month = String.format("%02d", calendar.get(Calendar.MONTH)); 
     String day = String.format("%02d", calendar.get(Calendar.DATE)); 
     return year + month + day; 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return ""; 
    } 
} 

Per SimpleDateFormat, può solo analizzare il formato che ho sentito codificato.

dateToString("16/04/2015"); 

Può convertire per codice sopra. Ma, quando provo con il seguente formato

dateToString("Thursday, April 16, 2015"); 

vado Data di analizzarlo: "Giovedi, 16 mese di aprile, 2015" errore.

+0

Usa 'return new SimpleDateFormat ("aAAAMMGG") formato (calendar.getTime());.' come mese nel calendario viene conteggiato da 0. –

+0

non si basano su stringhe per comunicare con il tuo database. Per i valori di data-ora, utilizzare oggetti data-ora. A partire da JDBC 4.2 e versioni successive, utilizzare le classi java.time con 'PreparedStatement :: setObject' e' ResultSet :: getObject'. –

risposta

4

Si sta cercando di convertire una stringa in formato EEEE, MMMM dd, yyyy con il formato di dd/MM/yyyy ...

Avviare utilizzando il formato corretto per il String voi cercando di convertire, l'uso che cosa mai formato che si desidera convertire indietro ...

SimpleDateFormat from = new SimpleDateFormat("EEEE, MMMM dd, yyyy"); 
SimpleDateFormat to = new SimpleDateFormat("dd/MM/yyyy"); 

String value = to.format(from.parse(dateString)); 

Ora si potrebbe usare qualcosa come DateUtils.parseDate(String, String[]) che permette di fornire un certo numero di formati diversi, ma è ancora limitata a ciò che si potrebbe sapere.

Una soluzione migliore sarebbe quella di memorizzare il valore Date direttamente all'interno del database.

+0

Grazie @MadProgrammer. Ma, non voglio memorizzare il valore Date direttamente nel database perché il computer client potrebbe avere un formato di data diverso e voglio solo riconvertirli al mio formato personalizzato prima di inserirlo nel database. –

+0

Questo è esattamente il mio punto, memorizza la data nel database, quindi non devi preoccuparti del formato (e non dovresti), dovresti, se possibile, fornire la formattazione degli oggetti in un formato che l'utente si aspetta, non quello che vuoi – MadProgrammer

0
  • Si passa parametro sbagliato SimpleDateFormater
  • Usa formato SimpleDateFormat = new SimpleDateFormat ("EEEE, MMMM dd, yyyy"), invece di SimpleDateFormat a = new SimpleDateFormat ("dd/MM/yyyy");
  • Risolve il problema relativo alla data di Unparseable.
+0

Grazie @Ranjeet. Ma, voglio dire, voglio solo convertire qualsiasi formato di data nel mio formato personalizzato. C'è un modo per convertire il formato della data variabile in un formato specifico? –

+0

@Thiha Zaw: Quindi è necessario scrivere regex per tutte le combinazioni possibili. – Ranjeet

0

Provare a usare qualcosa di simile:

public static String dateToString(String date){ 
    if(date.equals("")) return ""; 
    if(date == null || date.length() == 0){ 
     return ""; 
    } 
    SimpleDateFormat formatIn = new SimpleDateFormat("dd/MM/yyyy"); 
    SimpleDateFormat formatOut = new SimpleDateFormat("yyyy-dd-MM"); 

    try { 
     Date l_date = formatIn.parse(date); 
     String result = formatOut.format(l_date); 
     return result; 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return ""; 
    } 
} 

ma se si vuole mettere un po 'i dati in database che si può anche usare al posto della stringa java.sql.Date

qualcosa di simile:

SimpleDateFormat format = new SimpleDateFormat(); 

Connection conn = ... 
PreparedStatement ps = conn.prepareStatement("..."); 

long lDate = format.parse(sDate).getTime(); 
java.sql.Date dDate = new java.sql.Date(lDate); 
ps.setDate(1, dDate);