2015-10-14 1 views
0

Je dois représenter une durée de 100 jours.Combien de jours en ISO8601 durée «mois» et «années»?

De Wikipedia:

Durées sont représentés par la forme P [n] Y [n] M [n] DT [n] H [n] M [n] S

Mais pour une durée, combien de jours y a-t-il dans un mois? Cela dépend sûrement du mois dans lequel nous sommes ... Idem, des jours dans une année.

+1

Une raison pour laquelle vous ne pouvez pas utiliser 100D? Je soupçonne que le mois et l'année sont des quantités relatives, mais vous pourriez aussi spécifier un délai explicite de 100 jours, n'est-ce pas? – ShadowRanger

+0

@ShadowRanger Je suppose (peut-être à tort ??) que chaque champ est limité par la portée, donc vous ne pourriez pas (par exemple) spécifier les minutes> 59. Sinon, alors "P100D" fonctionnerait bien! – Roddy

Répondre

2

Suite à my comment, il semble qu'il est parfaitement légal de spécifier un nombre plus grand que le nombre d'unités qui composent la prochaine unité "plus grande", donc vous pouvez simplement utiliser P100D. La norme n'interdit pas aux valeurs de date et d'heure dans une représentation de durée de dépasser leurs «points de report», sauf indication contraire ci-dessous. Ainsi, "PT36H" pourrait être utilisé ainsi que "P1DT12H" pour représenter la même durée. Mais gardez à l'esprit que "PT36H" n'est pas le même que "P1DT12H" lors du passage de ou à l'heure d'été. Alors que l'exemple est pour les heures, il semble que les jours devraient être bien aussi (et comme votre problème illustre, encore plus utile, puisque les mois et les années ne sont pas des quantités fixes). Cela dit, la norme ne spécifie pas le nombre maximum de chiffres pour chaque unité, seule:

zéros de tête ne sont pas nécessaires, mais le nombre maximum de chiffres pour chaque élément doit être convenu par les parties communicantes.

Donc tout ce que consomme vos durées doit accepter au moins 3 chiffres par élément pour P100D à travailler; cela ne semble pas être un niveau de soutien requis inhabituellement élevé.

+0

Merci. Il semble que je suis confronté à une implémentation buggée. :( – Roddy

+0

@Roddy: Ah, oui, il y a des chances qu'il prenne en charge le format des semaines décimales, par exemple 'P14.2857143W' (ou une définition décimale plus ou moins précise de' 100/7') exprimerait (presque) la même durée en termes Pas exact à 100% puisque '2/7' est une décimale répétitive, mais assez proche selon la précision Malheureusement, la norme ne semble pas autoriser' P14W2D', ('W' est un code autonome pour une raison quelconque Cependant, si votre implémentation n'est pas standard, il vaut la peine de vérifier si elle est compatible. – ShadowRanger