Лучший способ конвертировать Java SQL Date из гггг-ММ-дд в дд ММММ гггг формат - PullRequest
3 голосов
/ 05 июля 2010

Есть ли простой способ преобразования даты Java SQL из формата гггг-ММ-дд в дд ММММ формат гггг?

Я мог бы преобразовать дату в строку и затем манипулировать ею, но я бы предпочелоставьте это как Java SQL Date.в то время, когда мне нужно сделать это, данные уже были прочитаны из базы данных MySQL, поэтому я не могу внести изменения там.

Ответы [ 4 ]

10 голосов
/ 05 июля 2010

Объекты типа java.sql.Date и java.util.Date (из которых java.sql.Date является подклассом) не имеют собственного формата. Вы используете объект java.text.DateFormat для отображения этих объектов в определенном формате, и именно DateFormat (не сам Date) определяет формат.

Например:

Date date = ...;  // wherever you get this
DateFormat df = new SimpleDateFormat("dd MMMM yyyy");
String text = df.format(date);
System.out.println(text);

Примечание. При печати объекта Date без использования объекта DateFormat, например:

Date date = ...;
System.out.println(date);

тогда он будет отформатирован с использованием некоторого формата по умолчанию. Однако этот формат по умолчанию не является свойством объекта Date, который вы можете изменить.

6 голосов
/ 05 июля 2010

Если это для презентации, вы можете сразу использовать SimpleDateFormat:

package org.experiment;

import java.sql.Date;
import java.text.SimpleDateFormat;

public class Dates {
    private static SimpleDateFormat df = new SimpleDateFormat("MMMM yyyy");

    public static void main(String[] args){

        Date oneDate = new Date(new java.util.Date().getTime());
        System.out.println(df.format(oneDate));
    }

}
5 голосов
/ 05 июля 2010

Непонятно, что вы подразумеваете под «датой Java SQL». Если вы имеете в виду, как в java.sql.Date, то на самом деле не имеет строкового формата ... это просто число. Чтобы отформатировать в определенным образом, используйте что-то вроде java.text.SimpleDateFormat.

В качестве альтернативы, преобразуйте его в Joda Time DateTime; Joda Time - намного лучший API даты и времени, чем встроенный. Например, SimpleDateFormat не является потокобезопасным.

(Обратите внимание, что java.sql.Date имеет большую точность, чем обычный java.util.Date, но, похоже, вам это здесь не нужно.)

1 голос
/ 11 мая 2017

ТЛ; др

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...