web-dev-qa-db-fra.com

java.text.ParseException: date non analysable "aaaa-MM-jj'T'HH: mm: ss.SSSZ" - SimpleDateFormat

J'apprécierais toute aide pour trouver un bug pour cette exception:

Java.text.ParseException: Unparseable date: "2007-09-25T15:40:51.0000000Z"

et le code suivant:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = sdf.parse(timeValue);
long mills = date.getTime();
this.point.time = String.valueOf(mills);

Il jette expcetion avec Date date = sdf.parse(timeValue);.

timeValue = "2007-09-25T15:40:51.0000000Z";, Comme par exception.

Merci.

33
Jacob

Z représente le caractère de fuseau horaire. Il faut le citer:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
69
Reimeus

Dans Java 7 , vous pouvez également utiliser le modèle X pour faire correspondre un fuseau horaire ISO8601, qui inclut la valeur spéciale Z (UTC):

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX");
Date date = sdf.parse("2007-09-25T15:40:51.0000000Z");

Cependant, il semble exiger un nombre exact de caractères en millisecondes dans le modèle, ce qui n'est pas requis pour le modèle de caractère "Z", et est plutôt gênant. Je pense que cela est dû au fait que la définition ISO8601 inclut également les "heures à deux chiffres", qui ne sont que des nombres, et ne peuvent donc pas être distinguées par l'analyseur des millisecondes précédentes.

Cette version conviendrait donc aux horodatages jusqu'à la seconde précision, moins aux millisecondes.

3
DNA