Как разобрать дату ISO 8601 без года, используя DateTimeOffset?

Мне нужно проанализировать даты ISO 8601, которые не содержат компонент года и, возможно, месяца, например:

--0412T102200Z 

Я пытаюсь использовать следующий код, который выдает исключение "Во входных данных должна быть хотя бы частичная дата с годом.":

DateTimeOffset.ParseExact("--0412T102200Z", "'--'MMdd'T'HHmmssZ",
           CultureInfo.InvariantCulture, DateTimeStyles.None);

Как разобрать такие даты? Есть ли шанс избежать замены «--» на год вручную перед разбором?


person IT Hit WebDAV    schedule 05.12.2013    source источник


Ответы (1)


Хотя замена года дефисом может быть разрешена в некоторых форматах, таких как схемы XML XSD, технически не соответствует стандарту ISO-8601.

Спросите себя, что это значение означает — вероятно, оно означает «каждый год в этот месяц, день и время по UTC». Другими словами, это повторяющийся шаблон.

Типы .Net DateTime и DateTimeOffset не могут хранить шаблон повторения. Они предназначены для представления конкретной даты и времени.

Так что, к сожалению, нет возможности разобрать это без года. Сначала вам нужно будет определить, к какому году вы хотите применить шаблон, вручную заменить тире на String.Replace, а затем вы сможете проанализировать его.

person Matt Johnson-Pint    schedule 31.12.2013