ISO 8601 Intervalle de Temps d'Analyse en Java
ISO 8601 définit une syntaxe pour représenter un intervalle de temps.
Il y a quatre façons d'exprimer un intervalle de temps:
- De début et de fin, tels que les "2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
- De début et la durée, tels que "2007-03-01T13:00:00Z/P1Y2M10DT2H30M"
- Durée et à la fin, comme "P1Y2M10DT2H30M/2008-05-11T15:30:00Z"
- Durée, tels que "P1Y2M10DT2H30M", avec en plus des informations de contexte
Si des éléments sont manquants à partir de la valeur de fin, ils sont supposés être les mêmes que pour la valeur de départ, y compris le fuseau horaire. Cette fonction de la norme permet concis représentations des intervalles de temps. Par exemple, la date d'une réunion de deux heures, y compris le début et la fin des temps pourrait être simplement indiqué que "2007-12-14T13:30/15:30", où "/15:30" implique "/2007-12-14T15:30" (la même date que le début), ou le début et dates de fin d'une période de facturation mensuelle, comme "2008-02-15/03-14", où "/03-14" implique "/2008-03-14" (la même année que le début).
En outre, les intervalles répétés sont formés par l'adjonction de", R[n]/" au début d'un intervalle d'expression, où R est utilisé comme la lettre elle-même et [n] est remplacé par le nombre de répétitions. Laissant de côté la valeur de [n] désigne un nombre illimité de répétitions. Donc, pour reprendre l'intervalle de "P1Y2M10DT2H30M" cinq fois en commençant à "2008-03-01T13:00:00Z", utilisez "R5/2008-03-01T13:00:00Z/P1Y2M10DT2H30M".
Je suis à la recherche d'un bon Java parser (si possible compatible avec la Joda-Time library) pour analyser cette syntaxe. Tous les pointeurs à une bonne bibliothèque ?
Vous devez vous connecter pour publier un commentaire.
java.temps
La java.le temps cadre intégré dans Java 8 et plus tard a un
Durée.parse
méthode pour l'analyse d'un ISO 8601 formaté durée:Imprime
Duration in seconds: 3754
Interval
cours offerts dans le ThreeTen-Extra projet. Ce projet s'étend java.temps, écrit par les mêmes personnes. Ce projet a également agit comme un terrain d'essai pour de possibles futurs ajouts à java.temps. LeInterval
classe définit un laps de temps comme une paire deInstant
les objets. La classe d'analyse de la norme ISO 8601 des chaînes de caractères comme"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
.Pour n'importe qui sur un projet qui pourrait être restreint à l'aide de la 3e partie des bibliothèques (des raisons de licence, ou quoi que ce soit), Java fournit au moins une partie de cette capacité, depuis la version 1.6 de Java (ou plus tôt?), à l'aide de la javax.xml.type de données.DatatypeFactory.newDuration(String) méthode et Durée classe. Le DatatypeFactory.newDuration(String) méthode d'analyse une chaîne de caractères dans "PnYnMnDTnHnMnS" format. Ces classes sont destinées à XML de la manipulation, mais depuis XML utilise la norme ISO 8601 moment de la notation, ils servent aussi pratique durée d'analyse utilitaires.
Exemple:
Je n'ai personnellement pas utilisé toute la durée de format à l'exception de la 4ème vous de la liste, donc je ne peux pas garantir qu'il traite avec succès ou non.
java.lang.IllegalArgumentException: PT5h12m36s at com.sun.org.apache.xerces.internal.jaxp.datatype.DurationImpl.organizeParts(DurationImpl.java:612)
- Je le prendre vous avez déjà essayé de Joda-Time? L'alimentation de l'exemple des chaînes à partir de votre question à travers
Interval.parse(Object)
révèle qu'il peut traiter "de début et de fin", "le départ et la durée" et "la durée et la fin", mais pas implicite champs, ni répétition.Les seuls autres éléments de la date/heure de la bibliothèque, que je sache, est JSR 310, qui ne semble pas gérer les intervalles comme ces.
À ce stade, la construction de votre propre améliorations sur le dessus de Joda-Time est probablement votre meilleur choix, désolé. Avez-vous des ISO intervalle de formats dont vous avez besoin pour gérer au-delà de ceux déjà pris en charge par Joda-Time?
La seule bibliothèque qui est capable de modèle de toutes les fonctionnalités de l'intervalle d'analyse que vous souhaitez agit en fait de ma bibliothèque Time4J (gamme-module). Exemples:
Quelques remarques:
Autre intervalle de classes existent avec les mêmes capacités d'analyse, par exemple
DateInterval
ouTimestampInterval
dans le package net.time4j.gamme.Pour la manipulation des durées (qui peut s'étendre à la fois du calendrier et de l'horloge unités), voir aussi la javadoc. Il y a aussi des fonctionnalités de mise en forme, voir classe imbriquée
Duration.Formatter
ou la version localiséenet.time4j.PrettyTime
(en fait en 86 langues).L'interopérabilité est offert avec Java 8 (
java.time
-package), mais pas avec Joda-Time. Par exemple: le début ou La fin de la composante d'unMomentInterval
peut facilement être interrogé pargetStartAsInstant()
ougetEndAsInstant()
.Intervalles répétés sont pris en charge par la classe IsoRecurrence. Exemple:
De sortie: