tl; др
Используйте try - catch
для захвата DateTimeParseException
, брошенного из LocalDate.parse
и YearMonth.parse
в классах java.time .
java.time
В современном подходе используются классы java.time .
YearMonth
Только для года-месяца без дня месяца используйте класс YearMonth
.
Если возможно, пусть ваши пользователи используют стандартный ISO 8601 формат для ввода данных: YYYY-MM
.Классы java.time по умолчанию используют стандартные форматы при разборе / генерации строк.
YearMonth ym = YearMonth.parse( "2018-01" ) ;
Если это невозможно, укажите шаблон форматирования.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/uuuu" ) ;
YearMonth ym = YearMonth.parse( "01/2018" , f ) ;
Для проверки на недопустимый ввод ловушку для исключения.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/uuuu" ) ;
YearMonth ym = null ;
try{
ym = YearMonth.parse( "01/2018" , f ) ;
} catch ( DateTimeParseException e ) {
// Handle faulty input
…
}
LocalDate
Для значения только на дату, без времени-день и без часового пояса, используйте LocalDate
класс.
Опять же, используйте стандартный формат ISO 8601 для ввода данных, если это возможно: YYYY-MM-DD
.
LocalDate ld = LocalDate.parse( "2018-01-23" ) ;
Если нет, укажите шаблон форматирования и ловушку для исключения, как показано выше.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = null ;
try{
ld = LocalDate.parse( "23/01/2018" , f ) ;
} catch ( DateTimeParseException e ) {
// Handle faulty input
…
}
Объединение
Если ввод может быть только датойили год-месяц, затем проверьте длину ввода, чтобы определить, какой из которых.
int length = input.length() ;
switch ( length ) {
case 7 :
… // Process as year-month using code seen above.
case 10 :
… // Process as date-only using code seen above.
default:
… // ERROR, unexpected input.
}
О java.time
java.time Framework встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами непосредственно с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .