Java日期将字符串转换回日期

Jåc*_*cob 4 java jsf

在我的JSF托管bean中,我已将startDate声明为java.utilDate类型,并且我也有getter和setter.从数据库startDate是日期类型.

当我收到值格式是默认类型,我格式化日期

SimpleDateFormat df = new SimpleDateFormat(" dd MMM yyyy");
Date oneDate = new Date(startDate);
df.format(oneDate);
Run Code Online (Sandbox Code Playgroud)

我面临的问题是df.format(oneDate);返回String.是否可以转换df.format(oneDate)回Date,以便我不必更改我的startDate数据类型.

任何帮助都非常感谢.

谢谢

Bal*_*usC 10

根据对该问题的评论:

@BalusC我同意你所说的,最好在UI中进行格式化.所以我在jsf页面中添加了以下内容.

<p:inputText value="#{vacationschedule.convertTime(vacationschedule.selectedRow.startDate)}">
Run Code Online (Sandbox Code Playgroud)

convertTimemanagedBean中的方法是

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

<p:inputText>正确显示,但如果我想使用,<p:calendar>那么我会收到错误

SEVERE:java.lang.IllegalArgumentException:无法将给定的Object格式化为Date

你正在寻找错误方向的解决方案.人为目标格式化必须在View(UI)方面完成,而不是在Model方面,更不用说Controller方面.

Date在JSF组件中以人类友好模式呈现对象,您应该使用<f:convertDateTime>标准JSF组件集提供的标记:

<p:inputText value="#{vacationschedule.selectedRow.startDate}">
    <f:convertDateTime pattern="yyyy MM dd" />
</p:inputText>
Run Code Online (Sandbox Code Playgroud)

这样您就可以随时保留房产Date.这样您就可以保存编辑后的值(初次尝试时无法实现!).

至于PrimeFaces的<p:calendar>组件,它具有pattern完全用于此目的的属性:

<p:calendar value="#{vacationschedule.selectedRow.startDate}" pattern="yyyy MM dd" />
Run Code Online (Sandbox Code Playgroud)

下载并查阅PrimeFaces用户指南,了解所有可用属性.