2016-08-19 5 views
0

Ich habe Schwierigkeiten, eine große 15-stellige Zahlenfolge in ein Datumsformat umzuwandeln.15-stellige Zahlenfolge in java8 Timestamp umwandeln

Beispielcode:

String dateInString = "201410051252323"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssZ"); 
LocalDateTime dateTime = LocalDateTime.parse(dateInString, formatter); 

Ich verfolge Ausnahme

bekommen
java.time.format.DateTimeParseException: Text '2014100591523' could not be parsed at index 0 

Kann jemand bitte der beste Weg, dies zu tun in Java 8

Antwort

1

Sie die die Idee Recht haben, deuten darauf hin, Aber es gibt zwei Probleme mit Ihrem Code - eine syntaktische und die andere logistische:

  • Ihr Muster erwartet, dass die Zeichenfolge mit Bindestrichen, Doppelpunkten und Leerzeichen formatiert wird. Beispiel: "JJJJ-MM-TT" entspricht "2014-10-05", nicht jedoch "20141005". Um die Übereinstimmung zu erreichen, lassen Sie einfach die Bindestriche los und verwenden Sie "yyyyMMdd".
  • Sie verwenden ein 'Z' in Ihrem Muster für die letzte Ziffer, die angibt, dass Sie einen Zeitzonenoffset in Ihrer Zeichenfolge erwarten. Aber das 'Z'-Muster entspricht Offsets wie "+0000" und "-8000", keine einzelne Ziffer. Auch auf Datetimes mit einer Zeitzone darstellen, sollten Sie die ZonedDateTime oder OffsetDateTime Klasse anstelle von LocalDateTime

Ich bin nicht sicher, welche Zeitzone der ‚3‘ in Ihrem Beispiel String soll darstellen, wenn es soll tatsächlich überhaupt einen Zonenversatz darstellen. Wenn Sie die Formatierung Ihres Datensatzes nicht steuern können, müssen Sie die letzte Ziffer entfernen und separat verarbeiten.

 

    String dateInString = "201410051252323"; 
    String dateTimeString = dateInString.substring(0, 14); // "20141005125232" 
    String zoneDigitString = dateInString.substring(14); // "3" 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); // no "Z" 
    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter); 

    /* Manually convert zoneDigitString to a ZoneId here */ 
    ZoneId zone = ...; 

    ZonedDateTime zonedDateTime = dateTime.atZone(zone); 

Sie müssen den "..." -Teil eigenständig behandeln, je nachdem, was "3" darstellt.

+0

Danke dafür. Wirklich hilfreich :) – Sushma