Из стандартов ISO-8601 существует 4 способа выражения интервалов/продолжительности:
-
Начало и конец, например "2007-03-01T13: 00: 00Z/2008-05-11T15: 30: 00Z"
-
Начало и продолжительность, такие как "2007-03-01T13: 00: 00Z/P1Y2M10DT2H30M"
-
Продолжительность и конец, например "P1Y2M10DT2H30M/2008-05-11T15: 30: 00Z"
-
Только продолжительность, например "P1Y2M10DT2H30M", с дополнительной информацией о контексте
Использование только Java 8 (без Joda, расширений и т.д.), есть ли элегантный способ обработки случаев 1-3?
Я знаю Duration.Parse()
и Period.Parse()
, но мне интересно, есть ли элегантный способ обработки 4 случаев. Например:
String datePeriod = "2016-07-21/P6D";
String twoDates = "2016-07-21/2016-07-25";
Duration d = Duration.parse(datePeriod); // DateTimeParseException
Duration p = Duration.parse(twoDates); // same
Мой текущий процесс мышления довольно неряшлив, и я на 100% уверен, что лучший способ. Что-то вроде обработки 4-х случаев индивидуально с помощью вложенных блоков try/catch для каждого случая, что похоже на анти-шаблон, если что-либо. (Разделить на /
, проанализировать первый фрагмент на дату, проверить наличие ошибок, проанализировать первый фрагмент за период, проанализировать второй фрагмент для даты, проверить наличие ошибок... вы получите идею)
Любые советы будут очень признательны!
-
Кроме того, ответы ISO 8601 Анализ интервала времени в Java на самом деле не помогают мне, поскольку главный ответ касается только PT...
вещи.