Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java日期转换字符串回日期_Java_Jsf - Fatal编程技术网

Java日期转换字符串回日期

Java日期转换字符串回日期,java,jsf,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)返

在我的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)返回字符串。
是否可以将
df.format(oneDate)
转换回最新格式,这样我就不必 更改我的起始日期数据类型

非常感谢您的帮助


感谢您使用您创建的相同的
SimpleDateFormat

对象

df.parse(yourDateString);

根据对该问题的评论:


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


managedBean中的
convertTime
方法是

public String convertTime(Date time){ 
    Date date = new Date(); 
    Format format = new SimpleDateFormat("yyyy MM dd"); 
    return format.format(date); 
} 
显示正确,但是如果我想使用
则会出现错误

严重:java.lang.IllegalArgumentException:无法将给定对象格式化为日期

你在错误的方向上寻找解决方案。以人为目标的格式化必须在视图(UI)端完成,而不是在模型端,更不用说控制器端了

要在JSF组件中以人性化模式显示
Date
对象,您应该使用标准JSF组件集提供的标记:


这样,您就可以一直保留属性
Date
。这样,您还可以保存编辑后的值(这在您初次尝试时是不可能的!)

对于PrimeFaces的组件,它有一个
模式
属性,正好用于此目的:



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

我希望我的代码能帮助您

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;
}
这对我很有用:

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


参考资料:

只需使用
parse()
方法即可。然而,我看不出这有什么用处。您可能会得到与开始时相同的
Date
对象。如果您打算在某些UI中格式化它以用于人类表示,只需在您将要向人类展示它的时刻对其进行格式化。希望这对您有所帮助:,java.text.ParsePosition)为什么不扩展日期并使用您自己的toString方法呢?@JamesBlack我认为这是一个糟糕的建议@我同意你说的,最好在UI中格式化。因此,我在我的jsf页面中添加了以下内容<代码>非常感谢BalusC,这很有帮助。谢谢你的回答。但是当我在
中显示日期时,我发现了一个小问题。不,它与时区有关。您的系统默认时区明显超出GMT。
Date
默认为GMT。
默认为系统默认时区。使用
timeZone
属性明确指定时区,例如
timeZone=“GMT”
。另请参阅我在回答中链接的PrimeFaces用户指南文档。再次感谢。正如你提到的,我添加了
javax.faces.DATETIMECONVERTER\u DEFAULT\u TIMEZONE\u IS\u SYSTEM\u TIMEZONE true
web.xml,解决了日期问题。谢谢。我还有一个关于数据模式的问题。在我的jsf页面