Избегайте устаревших классов даты и времени
Вы используете ужасные классы даты и времени, которые были годы назад вытеснены ведущими в отрасли современными java.time классами, определенными в JSR 310.
java.time
Переключитесь на использование LocalDate
и DateTimeFormatter
.
Пара ваших ожидаемых форматов предопределена DateTimeFormatter
, каждый из которых является вариацией стандартных форматов ISO 8601 .Для остальных трех форматов мы определяем шаблон форматирования.
package work.basil.example;
import java.time.LocalDate;
import java.time.Month;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;
import java.util.Objects;
public class Demo
{
public static void main ( String[] args )
{
Demo app = new Demo ();
app.demo ();
}
private void demo ( )
{
// ("yyyy-MM-dd", "dd.MM.yyyy", "yyyyMMdd", "yyyy/MM/dd", "dd/MM/yyyy"
final List < DateTimeFormatter > formatterList = List.of (
DateTimeFormatter.ISO_LOCAL_DATE ,
DateTimeFormatter.ofPattern ( "dd.MM.uuuu" ) ,
DateTimeFormatter.BASIC_ISO_DATE ,
DateTimeFormatter.ofPattern ( "uuuu/M/dd" ) ,
DateTimeFormatter.ofPattern ( "dd/MM/uuuu" )
);
final List < String > inputs = List.of ( "2020-01-23" , "23.01.2020" , "20200123" , "2020/01/23" , "23/01/2020" );
for ( String input : inputs )
{
LocalDate localDate = null;
for ( DateTimeFormatter formatter : formatterList )
{
try
{
localDate = LocalDate.parse ( input , formatter );
if ( ! localDate.equals ( LocalDate.of ( 2020 , Month.JANUARY , 23 ) ) )
{
throw new IllegalStateException ( "Oops! Unexpected result. " + input + " ➙ " + localDate );
}
System.out.println ( input + " ➙ " + localDate );
break; // Bail out of this inner FOR loop, as we have successfully parsed this input.
} catch ( DateTimeParseException e )
{
// Swallow exception, as we expect most to fail.
}
}
Objects.requireNonNull ( localDate , "Oops, unexpected input: " + input );
}
}
}
См. Этот код, запущенный в режиме реального времени на IdeOne.com .
2020-01-23 ➙ 2020-01-23
23.01.2020 ➙ 2020-01-23
20200123 ➙ 2020-01-23
2020/01/23 ➙ 2020-01-23
23/01 /2020 ➙ 2020-01-23