[Android] Date ISO8601

Messages postés
14565
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 août 2019
- - Dernière réponse : KX
Messages postés
16004
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 août 2019
- 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?

Afficher la suite 

4 réponses

Messages postés
16004
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 août 2019
86
0
Merci
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
Commenter la réponse de KX
Messages postés
14565
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 août 2019
88
0
Merci
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.
Commenter la réponse de BunoCS
Messages postés
14565
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 août 2019
88
0
Merci
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.
Commenter la réponse de BunoCS
Messages postés
16004
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
2 août 2019
86
0
Merci
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
Commenter la réponse de KX