Parar uma data ISO 8601 em Java8 quando todos os campos (incluindo separadores, mas não incluindo anos) são opcionais

Tenho um requisito para analisar seqüências de caracteres formatadas ISO8601 em Java com vários níveis de precisão. Alguns exemplos da string que eu preciso analisar são:

2018 2018-10 2018-10-15 2018-10-15T12: 00 2018-10-15T12: 00: 30 2018-10-15T12: 00: 30.123 20181015 201810151200 20181015120030 20181015120030.123 20181015T12: 00: 30.123

Onde eu não tenho um campo, estou livre para assumir o menor valor válido que se aplica (por exemplo, se o mês estiver faltando, posso assumir janeiro, se o dia estiver faltando, assuma o primeiro do mês e se o falta o tempo, assuma a meia-noite)

Procurei no SO e todos os exemplos que encontrei assumem que conheço o formato exato com antecedênci

questionAnswers(4)

yourAnswerToTheQuestion