ТЛ; др
myJavaSqlDate.toLocalDate()
.format(
DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG )
.withLocale ( Locale.UK )
)
11 мая 2017
Не путать значения даты и времени с их текстовым представлением
Как говорили другие, объект даты и времени имеет нет формат . Только строки, сгенерированные из объекта или проанализированные объектом, имеют формат. Но такие строки всегда отделены от объекта даты и времени.
Использовать объекты, а не строки
Избегайте использования строк для передачи значений даты и времени в / из вашей базы данных. Для значений даты и времени используйте классы даты и времени для создания экземпляров объектов даты и времени.
Сама цель JDBC заключается в устранении различий в типах между вашей базой данных и Java.
Использование java.time
Другие ответы устарели, поскольку они используют проблемные старые унаследованные классы даты и времени или почтенную библиотеку Joda-Time. Оба были вытеснены классами java.time.
Если у вас под рукой есть объект java.sql.Date
, преобразуйте его в java.time.LocalDate
, вызвав новый метод toLocalDate
, добавленный к старому классу .
LocalDate ld = myJavaSqlDate.toLocalDate() ;
Для драйверов JDBC , соответствующих JDBC 4.2 и более поздним версиям, вы можете напрямую работать с типами java.time.
Кажется, вас интересуют значения только для даты. Так что используйте LocalDate
. Класс LocalDate
представляет значение только для даты без времени суток и без часового пояса.
Чтобы сгенерировать строку в желаемом формате, вы можете указать собственный шаблон форматирования. Но я предлагаю позволить java.time автоматически локализоваться.
Для локализации укажите:
FormatStyle
для определения длины или сокращения строки.
Locale
для определения (а) человеческого языка для перевода названия дня, названия месяца и т. Д., И (б) культурных норм, решающих вопросы сокращения, капитализации, пунктуации, разделители и тому подобное.
Пример ...
LocalDate ld = LocalDate.now ( ZoneId.of ( "America/Montreal" ) ); // Today's date at this moment in that zone.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ).withLocale ( Locale.UK );
String output = ld.format ( f );
выход: 11 мая 2017
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , в настоящее время находящийся в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .