[Android] Date ISO8601

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 - 25 juil. 2016 à 17:29
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 27 juil. 2016 à 17:44
Hello,

Je dois recevoir une info de date/durée "au format ISO8601".
Je vais une petite recherche pour savoir ce qu'il en retourne et je trouve une page Wikipedia qui m'explique ce format.
Extrait:
Exemple :
P18Y9M4DT11H9M8S qui représente une (longue) durée de 18 ans, 9 mois, 4 jours, 11 heures, 9 minutes et 8 secondes
Dans mon cas, au niveau des durées, je suis susceptible d'avoir des valeurs de "PT7S" correspondant à 7s.
Le souci est que je ne trouve pas de façon pour créer un formatter correct afin de parser automatiquement ces valeurs.

Des idées?

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié par KX le 25/07/2016 à 19:45
Bonjour,

ISO-8601 c'est le standard utilisé notamment en JavaScript, JSON, XML etc. on trouve des méthodes de conversions dans javax.xml.datatype.*

Exemple :

DatatypeFactory dataType = DatatypeFactory.newInstance();
XMLGregorianCalendar calendar = dataType.newXMLGregorianCalendar("1977-04-22T06:00:00Z");
Duration duration = dataType.newDuration("P18Y9M4DT11H9M8S");

Remarque : si tu vises Java 8 ou avec une dépendance JodaTime supplémentaire je penses que tu peux t'en sortir aussi.

NB. Je n'avais pas vu que tu avais spécifié Android, du coup je ne connais pas les limitations de l'API...La confiance n'exclut pas le contrôle
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
26 juil. 2016 à 16:33
Merci KX, cela me met sur la piste. Par contre, Android n'inclue pas d'implémentation pour la DatatypeFactory. Il est conseillé de lui fournir l'implémentation Xercès mais je n'arrive pas à l'intégrer proprement.
Du coup, je jettes un oeil sur JodaTime.
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
27 juil. 2016 à 14:51
Pas mieux avec Joda.
Je n'ai pas vu de méthode qui me retourne une date/duration à partir d'une String ISO-8601.

Si quelqu'un a un exemple, je suis preneur.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié par KX le 27/07/2016 à 18:28
Ces deux classes fournissent a priori les Formatter dont tu as besoin :
Exemple :

DateTime dateTime = ISODateTimeFormat.dateTimeParser()
                    .parseDateTime("1977-04-22T06:00:00Z");
Period period = ISOPeriodFormat.standard()
                    .parsePeriod("P18Y9M4DT11H9M8S");
La confiance n'exclut pas le contrôle
0
Rejoignez-nous