java.time не предлагает никакой прямой поддержки того, что вы хотите. Незадолго до сегодняшнего дня я написал этот ответ , в котором также есть раздел, посвященный анализу дополнительной секунды. Но то, что сказано, есть все, что есть.
Итак, осталось разбор руки. Я бы попробовал что-то в этом духе: использовать регулярное выражение для определения того, является ли секунда 60. Если так: замените его на 59. Разбор. Конвертировать в UTC. Если время в UTC составляет 23:59:59, предположим, что в исходной строке была допустимая дополнительная секунда; в противном случае строка не будет указывать правильное время.
Я полагаю, что в случае високосной секунды действительны значения до 60.999999999. Поэтому, чтобы определить, есть ли 60, вам нужно посмотреть, что идет после двоеточия (если оно есть) после минут, и не зависеть от того, есть ли дробная часть.