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

时间:2012-02-27 15:07:33

标签: 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);

我面临的问题是df.format(oneDate);返回String。  是否可以将df.format(oneDate)转换回日期,以便我无需这样做  更改我的startDate数据类型。

非常感谢任何帮助。

由于

4 个答案:

答案 0 :(得分:10)

根据对该问题的评论:

  

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

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

convertTime方法是

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)方面完成,而不是在模型方面,更不用说控制器方。

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

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

通过这种方式,您可以始终保持该属性Date。通过这种方式,您还可以保存编辑的值(初次尝试时无法实现!)。

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

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

下载并咨询PrimeFaces Users Guide以了解所有可用属性。

答案 1 :(得分:2)

使用您创建的相同SimpleDateFormat对象

df.parse(yourDateString);

答案 2 :(得分: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;
}

答案 3 :(得分:0)

这对我有用:

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

参考:JSF 2.0 + Primefaces 2.x: Bind string to calendar