fmt:formatDate无法按预期工作

ksh*_*ghl 6 jsp jstl

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

我使用此声明包含了taglibrary -

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
Run Code Online (Sandbox Code Playgroud)

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

<td><fmt:formatDate pattern="yyyy-MM-dd hh:mm:ss" value="${proposal.creationDate}"/></td>
Run Code Online (Sandbox Code Playgroud)

但它仍然打印如下 -

Wed May 24 00:00:00 IST 3911
Run Code Online (Sandbox Code Playgroud)

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

evi*_*tto 13

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

<fmt:setLocale value="en_US" />
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />
Run Code Online (Sandbox Code Playgroud)

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

  • 自从我发布以来,我已经了解了为什么这样做.格式化操作(fmt:formatDate和fmt:formatNumber)默认使用`.toString()`如果locale为NULL,即使显式格式没有依赖于语言环境的转换.根据应用程序服务器的设置,可能没有默认语言环境,将其保留为NULL. (3认同)

Bal*_*usC 1

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

private Date creationDate;

public Date getCreationDate() {
    return creationDate;
}
Run Code Online (Sandbox Code Playgroud)

如果由于某些不明显的原因您确实无法更改类型,那么您需要首先通过 来解析它<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" />
Run Code Online (Sandbox Code Playgroud)

但这很简单。


与问题无关,小时数应由HHnot表示hh。另请参见SimpleDateFormatjavadoc。打印输出中的年份 3911 而不是 2011 也表明您使用了已弃用的 Date构造函数/方法来创建它。