2012-04-20 134 views
4

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

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> 

起始日期(字符串)的数值:周六4月21日5时30分00秒北京时间2012

Java方法来获得SQL日期

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日五点30分〇〇秒IST 2012

  1. 是什么不正确使用F:convertDateTime标签上面写的。
  2. 如果不是,我该如何将此字符串转换为sql日期。无法理解应该给出的格式。

感谢, Shikha

+2

没有 Daniel 2012-04-20 10:49:36

回答

7

f:convertDateTime仅将字符串改为对象,反之亦然。对于p:calendar对象需要是java.util.Date(它是value属性)。 字符串是您在浏览器中看到的格式化日期!

Primefaces日历自动附加转换器。这就是为什么您的p:calendar中有pattern属性。

因此,您应该删除丹尼尔已经提出的其他f:convertDateTime

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

public java.sql.Date sqlDate(java.util.Date calendarDate) { 
    return new java.sql.Date(calendarDate.getTime()); 
} 
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);