2012-02-27 3 views
4

В моем управляемом bean-компоненте JSF я объявил startDate как тип java.utilDate, и у меня есть getters и seters. Из базы данных startDate - тип даты.Java date convert string Вернуться к дате

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

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

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

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

Благодаря

+2

Просто используйте 'разобрана)' метода (. Однако я не понимаю, как это было бы полезно. Вероятно, вы в конечном итоге получите тот же самый объект 'Date', с которого вы начали. Если вы намерены отформатировать его для представления человека в каком-то интерфейсе, просто отформатируйте его точно в тот момент, когда вы собираетесь представить его людям. – BalusC

+0

Надеюсь, это поможет вам: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#parse(java.lang.String, java.text.ParsePosition) –

+0

Почему не продлить дату и просто использовать свой собственный метод toString? –

ответ

10

В соответствии с комментарием по этому вопросу:

@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> тогда я получаю ошибку

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

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

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

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

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

Как <p:calendar> КОМПОНЕНТ PrimeFaces', он имеет атрибут pattern именно для этой цели:

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

Скачать и проконсультироваться с PrimeFaces Users Guide, чтобы узнать обо всех доступных атрибутов.

+0

Спасибо lot BalusC, это помогло. Цените свой отличный ответ. – user75ponic

+0

Добро пожаловать. – BalusC

+0

Но я вижу небольшую проблему, когда я показываю дату в ' user75ponic

2

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

df.parse(yourDateString); 
0

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

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; 
}