ТЛ; др
MonthDay // Represent a month & day-of-month, without a year.
.from( // Extract a `MonthDay` from a `LocalDate`, omitting the year but keeping the month and day-of-month.
LocalDate // Represent a date-only value, without time-of-day and without time zone.
.parse( // Parse a string to get a `LocalDate`.
"24/04/2019" , // FYI, better to use standard ISO 8601 formats rather than devising a custom format such as this.
DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) // Match the formatting pattern of your input strings.
) // Returns a `LocalDate`.
) // Returns a `MonthDay`.
.format( // Generate a `String` with text representing the value of this `MonthDay` object.
DateTimeFormatter.ofPattern( "dd/MM" )
) // Returns a `String`.
См. Этот код в режиме реального времени на IdeOne.com .
24/04
LocalDate
& MonthDay
Java поставляется с классами для этой работы:
Разобрать ваши входные строки, чтобы получить LocalDate
объектов. Определите шаблон форматирования в соответствии с форматом ввода.
String input = "24/04/2019" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
Анализировать.
LocalDate ld = LocalDate.parse( input , f ) ;
Генерация строки в стандартном формате ISO 8601 , ГГГГ-ММ-ДД. Я настоятельно рекомендую вам использовать эти форматы при обмене значениями даты и времени в виде текста, а не при разработке собственных пользовательских форматов.
Классы java.time по умолчанию используют эти стандартные форматы при разборе / генерации строк. Поэтому не нужно указывать шаблон форматирования.
String output = ld.toString() ;
2019-04-24
Извлекайте только месяц и день, оставляя год.
MonthDay md = MonthDay.from( ld ) ; // Extract the month & day-of-month, but omit the year.
Генерация строки в стандартном формате ISO 8601. Формат использует двойные дефисы впереди для обозначения пропущенного года.
String output = md.toString():
- 04-24
Вы можете также проанализировать это значение.
MonthDay md = MonthDay.parse( "--04-24" ) ;
Вы можете вернуться к LocalDate
, указав год.
LocalDate ld = md.atYear( 2019 ) ; // Generate a `LocalDate` by specifying a year to go with the month & day.
не только для вывода. Я хочу выполнить сложение или подать заявку на цикл в эту дату.
Изучите JavaDoc для обоих классов. Предлагается много удобных методов.
Вы можете сравнить с isBefore
и isAfter
.
Вы можете делать математику, складывая или вычитая промежутки времени. Вы можете настроить, например, перейти к определенному дню месяца. Обратите внимание, что классы java.time следуют шаблону неизменяемых объектов . Таким образом, вместо того, чтобы изменять («мутировать») оригинал, создается второй объект со значениями, основанными на оригинале.
О 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 .