регулярное выражение является излишним
Здесь нет необходимости в хитром сопоставлении регулярных выражений. Просто проанализируйте текст даты и времени как объекты даты и времени.
java.time
В вашем примере используются только два формата. Поэтому попытайтесь проанализировать каждый из них, используя современные java.time классы. Они похожи, один - дата первый, другой - день первый.
DateTimeFormatter fDateTime = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ;
DateTimeFormatter fTimeDate = DateTimeFormatter.ofPattern( "HH:mm:ss uuuu-MM-dd" ) ;
Сначала извлеките первые 19 символов из вашей строки, чтобы сосредоточиться только на данных даты и времени.
Разбор, отлов для DateTimeParseException
.
LocalDateTime ldt = null ;
try{
if( Objects.isNull( ldt ) {
LocalDateTime ldt = LocalDateTime.parse( input , fDateTime ) ;
}
} catch ( DateTimeParseException e ) {
// Swallow this exception in this case.
}
try{
if( Objects.isNull( ldt ) {
LocalDateTime ldt = LocalDateTime.parse( input , fTimeDate ) ;
}
} catch ( DateTimeParseException e ) {
// Swallow this exception in this case.
}
// If still null at this point, then neither format above matched the input.
if( Objects.isNull( ldt ) {
// TODO: Deal with error condition, where we encountered data in unexpected format.
}
Если вы хотите использовать только дату без времени, извлеките объект LocalDate
.
LocalDate ld = ldt.toLocalDate() ;
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Руководство по Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .