fmt:formatDate无法按预期工作

时间:2011-05-31 13:24:10

标签: jsp jstl

我正在尝试将我在jsp中获得的java.util.Date对象格式化为“yyyy-MM-dd hh:mm:ss”的模式,但它仍然以不同的方式打印它(默认情况下)可能)格式。

我使用此声明包含了taglibrary -

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

我使用以下代码行将其打印为表格单元格中的值 -

<td><fmt:formatDate pattern="yyyy-MM-dd hh:mm:ss" value="${proposal.creationDate}"/></td>

但它仍然打印如下 -

Wed May 24 00:00:00 IST 3911

有人可以建议,我可能做错了什么。

2 个答案:

答案 0 :(得分:13)

我有同样的问题。在尝试格式化日期之前,我能够通过设置区域设置来修复它:

<fmt:setLocale value="en_US" />
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />

这解决了问题,但我不知道为什么。

答案 1 :(得分:1)

${proposal.creationDate} 实际返回String而不是完整的Date时,就会发生这种情况。相应地修复它。

private Date creationDate;

public Date getCreationDate() {
    return creationDate;
}

如果您因某些非显而易见的原因而无法更改类型,则需要先<fmt:parseDate>解析它。

<fmt:parseDate var="realCreationDate" value="${proposal.creationDate}" pattern="EEE MMM dd HH:mm:ss z yyyy" locale="en" />
<fmt:formatDate value="${realCreationDate}" pattern="yyyy-MM-dd HH:mm:ss" />

但这很简单。


该问题

无关,小时数由HH而不是hh表示。另见SimpleDateFormat javadoc。打印输出中的3911年而不是2011年也表明您已使用已弃用的 Date构造函数/方法来创建它。