JSTL - use formatDate with a java.sql.Timestamp
java, jsp-tags, jstl, servlets, timestamp
Solution
You need to pass in `Timestamp#getTime()`.
<jsp:setProperty name="dateValue" property="time" value="${timestamp.time}" />
But this makes all no sense. The `java.sql.Timestamp` is already a subclass of `java.util.Date`. So this should also do:
<%@ attribute name="timestamp" required="true" type="java.sql.Timestamp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<c:if test="${not empty timestamp}">
<span title="${timestamp}"><fmt:formatDate value="${timestamp}"
pattern="MM/dd/yyyy HH:mm" /></span>
</c:if>
I'd by the way also change your models to declare the property as `java.util.Date` instead. You should not use `java.sql.Timestamp` in the model and view, but only in the data layer. You don't need to convert `ResultSet#getTimestamp()` to `java.util.Date` by parsing/formatting. Just upcasting is sufficient.
E.g.
import java.util.Date;
public class SomeModel {
private Date somefield;
// ...
}
with
someModel.setSomefield(resultSet.getTimestamp("somefield"));
Problem
I have a tag with the following: ``` <%@ tag body-content="empty"%> <%@ attribute name="timestamp" required="true" type="java.sql.Timestamp"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <jsp:useBean id="dateValue" class="java.util.Date" /> <c:if test="${not empty timestamp}"> <jsp:setProperty name="dateValue" property="time" value="${timestamp}" /> <span title="${timestamp}"> <fmt:formatDate value="${dateValue}" pattern="MM/dd/yyyy HH:mm" /> </span> </c:if> ``` I get the following error however: Error 500: com.ibm.ws.jsp.JspCoreException: java.lang.IllegalArgumentException: Cannot convert 5/1/12 10:36 AM of type class java.sql.Timestamp to long I was trying to follow this answer to convert a timestamp to a date in JSTL, so I wouldn't have change anything in my servlet. How can I convert a `java.sql.Timestamp` to a date so that `formatDate` can work with it, using JSTL?