Java преобразовать дату обратно в дату - PullRequest
4 голосов
/ 27 февраля 2012

В моем управляемом компоненте JSF я объявил startDate как тип java.utilDate, и у меня также есть методы получения и установки. Из базы данных startDate является типом даты.

При получении значения формат имеет тип по умолчанию, и я форматирую дату

SimpleDateFormat df = new SimpleDateFormat(" dd MMM yyyy");
Date oneDate = new Date(startDate);
df.format(oneDate);

Проблема, с которой я сталкиваюсь: df.format(oneDate); возвращает строку. Можно ли конвертировать df.format(oneDate) обратно в дату, чтобы мне не пришлось изменить мой тип данных startDate.

Любая помощь высоко ценится.

Спасибо

Ответы [ 4 ]

10 голосов
/ 27 февраля 2012

Согласно комментарию к вопросу:

@ BalusC Я согласен с тем, что вы сказали, лучше отформатировать в пользовательском интерфейсе.Поэтому я добавил следующее на своей странице JSF.

<p:inputText value="#{vacationschedule.convertTime(vacationschedule.selectedRow.startDate)}">

и convertTime метод в managedBean:

public String convertTime(Date time){ 
    Date date = new Date(); 
    Format format = new SimpleDateFormat("yyyy MM dd"); 
    return format.format(date); 
} 

<p:inputText> отображается правильно, однако, если я хочу использовать <p:calendar>, тогда я получаю ошибку

SEVERE: java.lang.IllegalArgumentException: Невозможно отформатировать данный объект как дату.

Вы ищете решение в неправильном направлении.Целевое форматирование должно выполняться на стороне представления (UI), а не на стороне модели, не говоря уже о стороне контроллера.

Чтобы представить объект Date в удобном для человека шаблоне в компоненте JSF, вы должны использовать тег <f:convertDateTime>, предоставляемый стандартным набором компонентов JSF:

<p:inputText value="#{vacationschedule.selectedRow.startDate}">
    <f:convertDateTime pattern="yyyy MM dd" />
</p:inputText>

Таким образом, вы можете все время сохранять свойство Date.Таким образом, вы также сможете сохранить отредактированное значение (что было бы невозможно при вашей первоначальной попытке!).

Что касается PrimeFaces '<p:calendar>*Для компонента 1036 * он имеет атрибут pattern именно для этой цели:

<p:calendar value="#{vacationschedule.selectedRow.startDate}" pattern="yyyy MM dd" />

Загрузите и ознакомьтесь с PrimeFaces User Guide , чтобы узнать обо всех доступных атрибутах.

2 голосов
/ 27 февраля 2012

Используя тот же SimpleDateFormat объект, который вы создали,

df.parse(yourDateString);
0 голосов
/ 09 мая 2014

Это работает для меня:

<p:calendar value="#{calTestBean.dateStr}" pattern="MM/dd/yyyy">
     <f:convertDateTime pattern="MM/dd/yyyy"/>
</p:calendar>

Ссылка: JSF 2.0 + Primefaces 2.x: Привязать строку к календарю

0 голосов
/ 27 февраля 2012

Я надеюсь, что мой код поможет вам

public String dateToString(Date date, SimpleDateFormat formatter) {
    return formatter.format(date);
}

public Date stringToDate(String date, SimpleDateFormat formatter) {
    try {
        return formatter.parse(date);
    } catch (ParseException e) {
        //Catching exception
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...