2015-10-14 3 views
0

Мне нужно представить продолжительность 100 дней.Сколько дней в ISO8601 длительности «месяцев» и «лет»?

От Wikipedia:

Длительность представлена ​​в формате P [N] Y [п] М [п] ДТ [п] Н [п] М [п] S

Но сколько времени прошло через месяц? Конечно, это зависит от того, в каком месяце мы находимся ... То же самое, дни в году.

+1

По какой-либо причине вы не можете просто использовать 100D? Я подозреваю, что месяц и год являются относительными величинами, но вы также можете просто указать явные 100 дней, верно? – ShadowRanger

+0

@ShadowRanger Я предполагаю (возможно, ошибочно), что каждое поле ограничено по диапазону, поэтому вы не могли (например) указать минуты> 59. Если нет, значит, «P100D» будет работать нормально! – Roddy

ответ

2

Следуя за my comment, похоже, что законно указывать счетчик больше, чем количество единиц, которые составляют следующее «большее» устройство, поэтому вы можете просто использовать P100D. Wikipedia says:

Стандарт не запрещает значения даты и времени в представлении продолжительности с превышением своих «переносных точек», за исключением случаев, указанных ниже. Таким образом, можно использовать «PT36H», а также «P1DT12H» для представления одинаковой продолжительности. Но имейте в виду, что «PT36H» не совпадает с «P1DT12H» при переключении с или на летнее время.

В то время как пример часами, кажется, что дни тоже должны быть прекрасными (и, как показывает ваша проблема, еще более полезно, поскольку месяцы и годы не являются фиксированными величинами). Тем не менее, стандарт не определяет максимальное количество цифр для каждого блока, только:

Нулей не требуется, но максимальное количество цифр для каждого элемента должно быть согласовано с взаимодействующими сторонами.

Таким образом, все, что потребляет ваши длительности, должно принимать не менее 3 цифр на элемент для P100D; это не похоже на необычно высокий уровень необходимой поддержки.

+0

Спасибо. Кажется, я имею дело с ошибкой реализации. :( – Roddy

+0

@ Roddy: Ах, boo. Любой шанс, что он поддерживает формат десятичных недель? Например, 'P14.2857143W' (или более точное или десятичное определение' 100/7') будет выражать (почти) такую ​​же продолжительность в терминах недель. Не 100% точно, так как '2/7' является повторяющимся десятичным, но достаточно близким в зависимости от точности. К сожалению, стандарт, по-видимому, не позволяет' P14W2D', ('W' является отдельным кодом по какой-либо причине), хотя если ваша реализация нестандартна, стоит проверить, поддерживает ли она ее. – ShadowRanger

Смежные вопросы