在JSP中转换并格式化日期


68

从我的JSP页面,我得到Date了这种格式。

2011年5月13日星期五19:59:09 GMT 0530(印度标准时间)

如何将其转换为模式yyyy-MM-dd HH:mm:ss


3
您是否尝试过看一下javadocs?Google“ java日期格式”,看看会发生什么。
mdrg 2011年

1
您不是在说“在我的JSP页面中”而不是“从我的JSP页面中”吗?
BalusC

3
您是否有机会将答案切换为压倒性的社区喜爱?
2014年

我从未见过这么多对一个问题投反对票的答案。至少显而易见,这是正确的答案。
斯图尔特

Answers:


-10

您可以使用SimpleDateFormat该类来实现。

SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String dates=formatter.format(mydate);
//mydate is your date object

8
我认为降票是针对a)使用scriptlet和b)甚至不进行围绕它的插入符/返回格式化的日期,以及c)尽管fmt:formatDate答案是更好的选择,但这是公认的答案。至少这就是为什么我很想拒绝它。
Manuel Manhart 2014年

3
在JSP中最好使用标签代替。<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fmt:formatDate value="${bean.date}" pattern="yyyy-MM-dd HH:mm:ss" />
Pablo GallegoFalcón2015年

1
投票最多的答案是将Java Date对象转换为在JSP中显示。但是问题是,当从JSP将Date对象返回到后端(可能是Java类)时,该如何将其格式化为更易读的模式。所以我认为这个答案确实可以回答这个问题(很明显,因为这是公认的问题)。
2015年

@Prime:格式Fri May 13 2011 19:59:09 GMT 0530 (India Standard Time)是的典型格式Date#toString(),这意味着他已经java.util.Date手头有一个对象,该对象不可能来自JSP文件,因为HTTP请求参数始终是java.lang.String(即使这样,转换String为则Date需要Knowlegde SimpleDateFormat,OP显然没有这样做)没有,否则他根本不会问这个问题)。
BalusC

260

在JSP中,通常需要为此使用JSTL <fmt:formatDate>。您可以当然也扔在一个小脚本使用SimpleDateFormat,但小脚本强烈反对自2003年以来。

假设${bean.date}返回java.util.Date,则可以使用以下方法:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
...
<fmt:formatDate value="${bean.date}" pattern="yyyy-MM-dd HH:mm:ss" />

如果您实际上使用的是java.util.Calendar,则可以调用其getTime()方法以java.util.Date退出<fmt:formatDate>接受以下内容的方法:

<fmt:formatDate value="${bean.calendar.time}" pattern="yyyy-MM-dd HH:mm:ss" />

或者,如果您实际上将日期保存在java.lang.String(这表示模型中存在严重的设计错误;您应该真正修复模型以将日期存储为java.util.Date而不是java.lang.String!),那么可以从一种日期字符串格式进行转换,例如MM/dd/yyyy转换为其他日期字符串格式,例如yyyy-MM-dd在JSTL的帮助下<fmt:parseDate>

<fmt:parseDate pattern="MM/dd/yyyy" value="${bean.dateString}" var="parsedDate" />
<fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd" />

我喜欢您添加如何存储$ {bean.date}以返回java.util.date
shareef,2013年

@shareef:只需阅读基本的JSP / Servlet教程。我们的servlets Wiki页面是查找引用的好起点stackoverflow.com/tags/servlets/info
BalusC,

我认为这个例子写得很好。不幸的是,即使在我的情况下bean.date确实返回java.util.Date,它也对我不起作用!>>根据标签文件中的TLD或属性指令,属性[value]不接受任何表达式
user1445967

1
@ user1445967:您的JSTL安装已损坏。请遵循stackoverflow.com/a/4928309中的说明。您很有可能standard.jar在运行时类路径中徘徊着JSTL 1.0。摆脱它。
BalusC

8
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
 <!DOCTYPE html>
 <html dir="ltr" lang="en-US">
 <head>
 <meta charset="UTF-8" />
  <title>JSP with the current date</title>
  </head>
 <body>
 <%java.text.DateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy"); %>
<h1>Current Date: <%= df.format(new java.util.Date()) %> </h1>
</body>
</html>

产出:当前日期:10/03/2010


操作者想要yyyy-MM-dd HH:mm:ss而不是dd / MM / yyyy
Horcrux7

0
Date td = new Date();
String b = new String("");
SimpleDateFormat format = new SimpleDateFormat("YYYY/MM/dd");
b = format.format(td);
out.println(b);           

-3

上面的示例显示了使用... sun.com/jsp/jstl/format的导入是不正确的(这意味着它对我不起作用)。

而是尝试以下-此导入语句有效

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/core-rt" prefix="c-rt" %><%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<html>
  <head>
    <title>Format Date</title>
  </head>

  <body>
    <c-rt:set var="now" value="<%=new java.util.Date()%>" />

    <table border="1" cellpadding="0" cellspacing="0"
    style="border-collapse: collapse" bordercolor="#111111"
    width="63%" id="AutoNumber2">
      <tr>
        <td width="100%" colspan="2" bgcolor="#0000FF">
          <p align="center">
            <b>
              <font color="#FFFFFF" size="4">Formatting: 
              <fmt:formatDate value="${now}" type="both"
              timeStyle="long" dateStyle="long" />
              </font>
            </b>
          </p>
        </td>
      </tr>

3
我的回答是正确的。您的问题仅是由于您使用的是10年且已过时的JSTL原型库,而不是较新的JSTL原型库。/jsp路径中带有更新的taglib URI是JSTL 1.1在2003年11月左右引入的。我们已经在2011年。弄清楚自己过时了...使自己和图书馆保持最新状态。
BalusC

-3
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@page import="java.util.Locale"%>

<html>
<head>
<title>Date Format</title>
</head>
<body>
<%
String stringDate = "Fri May 13 2011 19:59:09 GMT 0530";
Date stringDate1 = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z", Locale.ENGLISH).parse(stringDate);
String stringDate2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(stringDate1);

out.println(stringDate2);
%>
</body>
</html>

请始终将答案放在上下文中,而不仅仅是粘贴代码。有关更多详细信息,请参见此处
gehbiszumeis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.