Primefaces日历组件&日期转换

时间:2012-04-20 10:08:07

标签: jsf-2 primefaces

我正在使用primefaces的日历组件。我在VO中有一个相应的字符串。在保存数据库时,我需要将字符串转换为java.sql.date。

XHTML

<p:calendar value="#{articlePromo.startDate}"
    id="vendorStartDateInputTxt" pattern="dd/MM/yyyy" mode="popup" showOn="button">
    <f:convertDateTime type="date"  dateStyle="short" pattern="dd/MM/yyyy" />
</p:calendar>

startDate(String)的值为:Sat Apr 21 05:30:00 IST 2012

获取sql Date的Java方法

public static Date getSQLDate(String strDate) {
    java.sql.Date sqlDate = null;
    try {
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date dt = formatter.parse(strDate);
        sqlDate = new java.sql.Date(dt.getTime());
    } catch (Exception e) {
        e.printStackTrace();
    }

    return sqlDate;
}

在转换日历的java.util.date时,我使用了模式dd / MM / yyyy。但它转换的日期是:星期六4月21日05:30:00 IST 2012。

  1. 上面写的 f:convertDateTime 标记不正确。
  2. 如果没有,我该如何将此字符串转换为sql日期。无法理解应该给出的格式。
  3. 谢谢, Shikha

2 个答案:

答案 0 :(得分:8)

<p:calendar value="#{articlePromo.startDate}"
    id="vendorStartDateInputTxt" pattern="dd/MM/yyyy" mode="popup" showOn="button">
</p:calendar>

其中startDatejava.util.Date对象

另外,如果要格式化Date对象,可以使用SimpleDateFormat:

DateFormat df=new SimpleDateFormat("dd/MM/yyyy");
String s=df.format(startDate);

答案 1 :(得分:7)

f:convertDateTime仅将 String 转换为 Object ,反之亦然。 p:calendar对象需要是java.util.Datevalue属性)。 String 是您在浏览器中看到的格式化日期!

Primefaces日历会自动附加转换器。这就是patternp:calendar属性的原因。

因此,您应该删除Daniel已经提出的额外f:convertDateTime

然后从java.util.Datejava.sql.Date的转换非常简单:

public java.sql.Date sqlDate(java.util.Date calendarDate) {
  return new java.sql.Date(calendarDate.getTime());
}