ТЛ; др
LocalDate.parse( // Represent a date-only value, without time-of-day and without time zone.
"23/01/2018" , // Tip: Use standard ISO 8601 formats rather than this localized format for data-exchange of date-time values.
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
) // Return a `LocalDate` object.
.getMonth() // Return a `Month` enum object representing the month of this date.
.getDisplayName( // Automatically localize, generating text of the name of this month.
TextStyle.SHORT , // Specify (a) how long or abbreviated, and (b) specify whether used in stand-alone or combo context linguistically (irrelevant in English).
Locale.US // Specify the human language and cultural norms to use in translation.
) // Returns a `String`.
См. Этот код в режиме реального времени на IdeOne.com .
Jan
java.time
Современный подход использует классы java.time , которые вытеснили ужасные Date
/ Calendar
/ SimpleDateFormat
классы.
ISO 8601
Совет. При обмене значениями даты и времени в виде текста используйте стандартные форматы ISO 8601 , а не текст, предназначенный для представления людям. Для значения только для даты это будет ГГГГ-ММ-ДД, например 2018-01-23.
LocalDate
Класс LocalDate
представляет значение только для даты без времени суток и без часового пояса.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( "23/01/2018" , f ) ;
Month
enum
Получить месяц как Month
enum объект.
Month m = ld.getMonth() ;
Локализуйте
Попросите, чтобы Month
enum генерировал String
с текстом названия месяца. Метод getDisplayName
может автоматически локализоваться для вас. Для локализации укажите:
TextStyle
для определения длины или сокращения строки. Обратите внимание, что на некоторых языках вам может потребоваться выбрать автономный стиль в зависимости от контекста, в котором вы собираетесь использовать результат.
Locale
для определения:
- человеческий язык для перевода названия дня, названия месяца и т. П.
- культурных норм , решающих вопросы аббревиатур, заглавных букв, пунктуации, разделителей и т. П.
Код:
String output = m.getDisplayName( TextStyle.SHORT , Locale.US ) ;
Использовать enum, а не integer
Обратите внимание, что мы не использовали целое число для представления месяца. Вместо этого использование объекта enum делает наш код более самодокументируемым, обеспечивает допустимые значения и обеспечивает type-safety .
Поэтому я настоятельно рекомендую передавать Month
объекты, а не просто int
целые числа. Но если вы настаиваете, позвоните Month.getMonthValue()
, чтобы получить номер. Нумерация нормальная, 1-12 за январь-декабрь, в отличие от предыдущих классов.
int monthNumber = ld.getMonthValue() ;
О java.time
Фреймворк java.time встроен в 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 .