Primefaces日历组件和日期转换

Shi*_*wan 4 primefaces jsf-2

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

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

Java方法获取sql Date

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;
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用上面写的f:convertDateTime标记有什么不对.
  2. 如果没有,我该如何将此字符串转换为sql日期.无法理解应该给出什么格式.

谢谢,Shikha

Dan*_*iel 8

尝试

<p:calendar value="#{articlePromo.startDate}"
    id="vendorStartDateInputTxt" pattern="dd/MM/yyyy" mode="popup" showOn="button">
</p:calendar>
Run Code Online (Sandbox Code Playgroud)

其中startDatejava.util.Date对象

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

DateFormat df=new SimpleDateFormat("dd/MM/yyyy");
String s=df.format(startDate);
Run Code Online (Sandbox Code Playgroud)


Mat*_*ndy 7

f:convertDateTime只转换字符串对象,反之亦然.的对象p:calendar需要是一个java.util.Date(它是value属性).该字符串是您在浏览器中看到格式化的日期!

Primefaces日历会自动附加转换器.这就是你拥有pattern属性的原因p:calendar.

因此,您应该删除f:convertDateTimeDaniel已经提出的附加内容.

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

public java.sql.Date sqlDate(java.util.Date calendarDate) {
  return new java.sql.Date(calendarDate.getTime());
}
Run Code Online (Sandbox Code Playgroud)