Хорошо, давайте навести порядок:
Стандартная поддержка обоих типов, является: Даты как определенный момент времени, начиная с года 0000 и до года 9999.
Или длительностей который может описать промежуток времени между двумя датами или продолжительность/продолжительность арбитра, которая не находится между двумя конкретными датами.К счастью, когда вы указываете длительности, стандарт намного более гибкий, чем с датами :)
Итак, как мы можем определить разницу между продолжительностью, которая относится к датам и длительности арбитров?
Простой:, если вы указали «P1Y», который составляет один год - это именно то, что вы получили.
Если вы хотите рассчитать, сколько это 1 год имеет в днях - это будет зависеть от даты начала подачи этого года.
Например, если дата начала - 1/1/2010 (значит, в феврале есть 28 дней, что нормально), ваш расчет за 1 год даст дней. Но если сказать, что дата начала 1/1/2012 (Так февраль 29 дней из-за високосного года) ваш 1 год значение даст дней в нем ...
Но в обоих случаях вы хотели 1 год - и у вас есть 1 год. Поэтому 1-е дело не в том, чтобы использовать годы в длительности в вашем случае, так как то, что вы действительно хотите, это указать эквивалент 40000000 в секундах - просто в ближайшее время ... так что наша следующая альтернатива - указать его в днях и 0,962 как часть одного дня:
40000000 секунд составляет 462 дней, 23 часов, 6 минут и 40 секунд и в соответствии с тем, что я прочитал в ISO-8601 это может быть определен как продолжительность, как, что: «P462DT23H6M40S» или вы можете просто указать «PT40000000S» или даже «P462.962D» - все длится.
Чтобы облегчить боль расчета вы можете использовать этот очень простой C# Line:
var timespan = new TimeSpan(0, 0, 40000000);
Просто поставить точку останова после него и посмотреть на внутренности класса TimeSpan вычисленной для вас.
Положить их в формат ISO-8601 довольно легко после этого момента.
О, и последнее - да, вы также можете указать фракции - например, «P0.5Y», чтобы указать полгода.
какой язык программирования вы используете? –
@ JánVorčák, язык программирования здесь не вопрос. В стандарте не указано, как представлять 40 мегасекунд в формате продолжительности 'n' years,' n' месяцев, 'n' дней и т. Д. Как узнать, сколько дней« M1D2 »? Это 31 + 2? или 30 + 2? или, возможно, 28 + 2? Кажется, вот что задает вопрос. – soulseekah
@soulseekah вы правы Извините, я неправильно понял вопрос –