Есть больше возможностей.Я бы, вероятно, пошел для изменения временной строки, чтобы соответствовать синтаксису, принятому Duration.parse
.
String[] timeStrings = { "03:45", "1:03:45", "123:03:45" };
for (String timeString : timeStrings) {
String modifiedString = timeString.replaceFirst("^(\\d+):(\\d{2}):(\\d{2})$", "PT$1H$2M$3S")
.replaceFirst("^(\\d+):(\\d{2})$", "PT$1M$2S");
System.out.println("Duration: " + Duration.parse(modifiedString));
}
Вывод:
Duration: PT3M45S
Duration: PT1H3M45S
Duration: PT123H3M45S
Случайчасы, минуты и секунды (два двоеточия) обрабатываются первым вызовом replaceFirst
, который, в свою очередь, удаляет оба двоеточия и гарантирует, что второй replaceFirst
ничего не заменит.В случае только одного двоеточия (минуты и секунды) первый replaceFirst
не может ничего заменить и передает строку без изменений во второй вызов replaceFirst
, который, в свою очередь, преобразуется в формат ISO 8601, принятый Duration.parse
.
Вам нужен класс Duration
по двум причинам: (1) Если я правильно понимаю, ваша временная строка обозначает длительность, поэтому использование LocalTime
неверно и приведет в замешательство тех, кто поддерживает ваш код после вас.(2) Максимальное значение LocalTime
равно 23: 59: 59.999999999, поэтому оно никогда не примет 123: 03: 45.