2017-10-09 3 views
0

J'ai une chaîne "2017-01-03T02:20:52+00:00" Je veux convertir en LocalDateTime.Impossible d'analyser String en Java Date

J'ai essayé le code ci-dessous

import java.time.format.DateTimeFormatter; 
import java.time.LocalDateTime; 

public class HelloWorld{ 

    public static void main(String []args){ 
     System.out.println("Hello World"); 
     String date = "2009-07-16T19:20:30-05:00"; 
     String pattern = "yyyy-MM-dd'T'HH:mm:ssZ"; 
     DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(pattern); 
     LocalDateTime dateTime = LocalDateTime.parse(date, inputFormatter); 
     System.out.println(dateTime); 
    } 
} 

J'ai essayé divers modèle, mais chaque fois que je reçois ci-dessous erreur:

Exception in thread "main" java.time.format.DateTimeParseException: Text '2009-07-16T19:20:30-05:00' could not be parsed at index 19 
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) 
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) 
    at java.time.LocalDateTime.parse(LocalDateTime.java:492) 
    at HelloWorld.main(HelloWorld.java:11) 
+0

à l'index 19 date chaîne , il y a un "-", qui peut ne pas correspondre au modèle utilisé ... – deHaar

+1

Veuillez consulter le document Java DateFormat: http://docs.oracle.com/javase/7/docs/api/j ava/text/SimpleDateFormat.html. Le symbole 'Z' est le fuseau horaire RFC 822, par exemple: -0800. Donc, si vous supprimez le point-virgule de votre entrée, cela devrait fonctionner correctement. – Korashen

+0

Oui, @Korashen a raison. Sinon, vous pouvez utiliser X au lieu de Z dans votre modèle pour utiliser le format ISO 8601. –

Répondre

4

Un seul Z ne permet pas : dans le fuseau horaire. Utilisez ZZZZZ (cinq Z) pour le format étendu.

+0

Merci, cela a fonctionné pour moi. – Abhijit

0

Le format de votre date chaîne est incorrecte

Modifier comme si:

String date = "2009-07-16T19:20:30-0500"; 

Notez le changement avant la timezone.

0

Si vous voulez garder votre format de date, vous pouvez utiliser ce modèle:

String pattern = "yyyy-MM-dd'T'HH:mm:ssXXX"; 
0

essayez ceci:

String date = "2009-07-16T19:20:30-0500"; 
String pattern = "yyyy-MM-dd'T'HH:mm:ssZ"; 

ou

String date = "2009-07-16T19:20:30-05:00"; 
String pattern = "yyyy-MM-dd'T'HH:mm:ssz";