2016-07-25 2 views
0

Ich versuche, einen String-Wert (zunächst eine LocalDateTime-Variable) zu konvertieren, der in einer Datenbank gespeichert wurde (als datetime) und in eine LocalDateTime-Variable zu analysieren. Ich habe es mit einem Formatierer versucht:String-Variable von Datenbank (Typ datetime) zu LocalDateTime-Variable mit Resultset

String dTP; 
dTP=(rs.getString("arrivedate")); 
      DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; 
      LocalDateTime dateTimeParked = LocalDateTime.parse(dTP,formatter); 

Und ohne Formatierer:

String dTP; 
dTP=(rs.getString("arrivedate")); 
LocalDateTime dateTimeParked = LocalDateTime.parse(dTP); 

aber ich habe den gleichen Fehler jedes Mal: ​​

Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '2016-07-09 01:30:00.0' could not be parsed at index 10 

Mein Denken ist, dass Index 10 ist der Abstand zwischen Datum und Uhrzeit.

Könnte mir jemand dabei helfen? Ich habe stundenlang an ihn gewesen :(

Antwort

1
. .

ein Fehler im Format der Es gibt, die das Problem verursacht vertretend https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html.The ISO Datum Zeit des Formats ‚2011-12-03T10: 15: 30‘. im folgenden finden Sie die Idee geben

public static void main(String[] args) throws Exception { 


    String isoDate = "2016-07-09T01:30:00.0"; 
    // ISO Local Date and Time '2011-12-03T10:15:30' 
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; 
    LocalDateTime dateTimeParked = LocalDateTime.parse(isoDate, formatter); 
    System.out.println(dateTimeParked); 




    String date = "2016-07-09 01:30:00.0"; 
    DateTimeFormatter formatterNew = DateTimeFormatter.ofPattern("yyyy-LL-dd HH:mm:ss.S"); 
    LocalDateTime dateTimeParkedNew = LocalDateTime.parse(date, formatterNew);  
    System.out.println(dateTimeParkedNew); 

} 

Dieser Druck s: 2016-07-09T01: 30 2016-07-09T01: 30

+0

Vielen Dank Jungs! Es funktioniert jetzt großartig. @ Ramachandran G A –

0

versuchen, diese Formatierer:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); 

ich über die Millisekunde Teil bin nicht sicher, obwohl (Falls es mehr als 1 Zeichen lang ist)

+0

Dieser Thread sollte weiter helfen: http://stackoverflow.com/questions/1459656/how-to-get-the-current-time-in-yyyy-mm-dd-hhmisec-millisecond-format -in-java –

1

Die anderen Antworten sind richtig, die Zeichenfolge ist in SQL-Format, das unter Verwendung eines Leerzeichens von der kanonischen Version von ISO 8601 unterscheidet sich in die Mitte eher als ein T. Ersetzen Sie das Leerzeichen also entweder durch T oder definieren Sie ein Formatierungsmuster für das Parsing.

Verwenden Sie Zeichenfolgen für Datum-Zeitwerte aus der Datenbank nicht

Aber das größere Problem ist, dass Sie das Datum-Zeit-Wert aus der Datenbank als String abrufen. Sie sollten Datum-Uhrzeit-Typen von Daten als Datum-Uhrzeit-Typen in Java abrufen.

Für Treiber, die mit JDBC 4.2 und höher kompatibel sind, sollten Sie setObject und getObject mit java.time-Objekten verwenden können.

Verwenden Sie für den SQL-Typ TIMESTAMP WITHOUT TIME ZONELocalDateTime. Verwenden Sie für TIMESTAMP WITH TIME ZONE je nach Datenbank Instant oder vielleicht ZonedDateTime.

LocalDateTime ldt = myResultSet.getObject(1);