2012-07-05 7 views
0

Я использую struts2.x с jquery date picker.
Я хочу рассказать в формате dd/mm/yyyy. Но из базы данных, когда она выбирается, она приближается, как yyyy-mm-dd.Then я преобразовал ее в требуемый формат, но тип - String. Итак, следующий i конвертировал его в тип Date. Но формат изменен.мы можем преобразовать дату форматирования dd/mm/yyyyy в формате Date в том же формате?

Date getRiskCommDate() 
{ 
String fString = null; 
System.out.println("Coming Date from DB"+riskCommDate); 
if(riskCommDate!=null) 
{ 
SimpleDateFormat format = new SimpleDateFormat(); 
format.applyPattern("dd/MM/yyyy"); 
fString = format.format(riskCommDate); 
} 
System.out.println("Formated Date in String Form "+fString); 
Date d = new Date(fString); 
System.out.println("Formated Date in Date form Date "+d); 
return d; 
} 

Выход:

Coming Дата из БД 2012-07-04
Форматированный Дата в форме струнного 04/07/2012
Форматированный Дата в формате даты Дата Сб 7 апреля 00:00 : 00 IST 2012

Любая идея высоко оценена.

+0

FYI, неприятные старые классы времени, такие как ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html) , ['java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) и' java.text.SimpleDateFormat' теперь [наследие ] (https://en.wikipedia.org/wiki/Legacy_system), вытесненный [* java.time *] (https://docs.oracle.com/javase/9/docs/api/java/time/ package-summary.html), встроенные в Java 8 и Java 9. См. [* Tutorial * by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

ответ

4

Класс java.util.Date не имеет собственности для хранения формата.

Чтобы отобразить значение Date в произвольном формате, позвоните по методу format по телефону SimpleDateFormat.

Когда вы сделаете это:

System.out.println(dateInstance) 

... вы просто вызов toString() на Date. Этот метод возвращает дату в фиксированном формате в версии String.

На основе комментариев

Если вы так или иначе хочет пользовательский формат с датой, например, то вы можете либо создать экземпляр пользовательского класса даты обертывание

class MyDate{ 
    private Date date; 
    //provide appropriate accessor 
    //override toString() method to support required output 
} 

или extendDate

class MyDate extends Date{ 
    //override toString() method to support required output 
    @Override 
    public String toString(){ 
     //convert `this` to String with required format with the help of `SimpleDateFormat` 
    } 
} 
+0

Привет, Jigar, мне нужно преобразовать его в формат Date любой ценой. Иначе мое приложение не будет работать вообще. Значит, любая возможность сделать это? –

+0

Хранить его в 'String' –

+0

Я должен преобразовать его в тип Date с тем же форматом ... –

2

Дата печатает формат, основанный на Locale. Он не «запоминает» формат, который вы ему дали, и хотите, чтобы вы его построили. Только строки имеют определенный формат, поэтому, если вам это нужно, сохраните его как строку.

+0

Привет, Питер, я вставляю один и тот же элемент данных в базу данных с Date как тип столбца. Так что мне нужно будет преобразовать в только дата ... –

0

java.time

Старые библиотеки хлопотно даты и времени в комплекте с ранней Java, были вытеснены в рамках java.time встроенного в Java 8 и более поздних версий. Для Java 6 & 7 используйте back-port, ThreeTen-Backport, а для Android - их адаптацию, ThreeTenABP. Избегайте использования старого java.util.Date/.Calendar и т. Д.

LocalDate

Классы java.time включают LocalDate для даты только значений без времени-дня и без часового пояса.

java.sql.Date

драйвера JDBC Надеюсь будет обновляться непосредственно иметь дело с типами java.time. До тех пор, используйте java.sql типы для перемещения данных в/из базы данных. Старый java.У классов sql есть новые методы to… и valueOf для преобразования с java.time. Наш интерес здесь находится в java.sql.Date.

LocalDate localDate = myJavaSqlDate.toLocalDate(); 

Вы можете перейти в другое направление, для представления в базу данных.

java.sql.Date myJavaSqlDate = java.sql.Date.valueOf(localDate); 

Генерация строки

Ни один из рассмотренных классов дат (java.util.Date, java.sql.Date, java.time.LocalDate) не имеют никакого «формат». Только текстовые представления их значений имеют формат. Если вам нужна строка, эти классы могут генерировать для вас объект String. Но не путайте этот объект String с объектом date-time, поскольку они полностью разделены и различны.

Метод toString на LocalDate используется стандарт ISO 8601 формат, такой как 2012-07-04 (что означает 4 июля 2012 г.).

String outputIso8601 = localDate.toString(); 

Для других форматов используйте DateTimeFormatter. Многие другие вопросы и ответы о переполнении стека имеют больше дискуссий.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); 
String output = localDate.format(formatter); // Generates a textual representation of the object’s date-only value. 

Еще лучше, позвольте java.time локализовать для вас.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); 
formatter = formatter.withLocale(Locale.CANADA_FRENCH); // or Locale.US, and so on. 
String output = localDate.format(formatter); 

О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Вы можете обмениваться java.time объекты непосредственно у вашей базы данных. Используйте JDBC driver, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах java.sql.*.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android
    • Более поздние версии Android реализаций пачке классов java.time.
    • Для более ранних Android (< 26) проект ThreeTenABP адаптируется ThreeTen-Backport (упомянутый выше). См. How to use ThreeTenABP….

ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

Смежные вопросы