[Android] Date ISO8601

Messages postés
14297
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 décembre 2018
- - Dernière réponse : KX
Messages postés
15869
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 décembre 2018
- 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 

Votre réponse

4 réponses

Messages postés
15869
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 décembre 2018
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
14297
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 décembre 2018
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
14297
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
17 décembre 2018
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
15869
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 décembre 2018
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.