ChatGPT解决这个技术问题 Extra ChatGPT

在 JSP 中转换和格式化日期

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

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

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

您是否尝试过查看 javadocs?谷歌“java 日期格式”,看看会发生什么。
你不是说“在我的 JSP 页面中”而不是“来自我的 JSP 页面”吗?
您是否有机会将答案切换到压倒性的社区最爱?
我从来没有见过这么多对一个问题投反对票的答案。至少很明显哪个是正确的答案。

C
Community

在 JSP 中,您通常希望为此使用 JSTL <fmt:formatDate>。您当然也可以使用 SimpleDateFormat 加入 scriptlet,但自 2003 年以来,scriptlet 就是 strongly discouraged

假设 ${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() 方法以从中获取 <fmt:formatDate> 接受的 java.util.Date

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

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

<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:只需阅读基本的 JSP/Servlet 教程。我们的 servlets wiki 页面是查找参考资料的良好起点stackoverflow.com/tags/servlets/info
我认为这个例子写得很好。不幸的是,即使在我的情况下 bean.date 确实返回了 java.util.Date,它对我也不起作用! >> 根据标签文件中的 TLD 或属性指令,属性 [值] 不接受任何表达式
@user1445967:您的 JSTL 安装已损坏。按照 stackoverflow.com/a/4928309 的说明进行操作。您很可能在运行时类路径中有 standard.jar 个 JSTL 1.0。摆脱它。
p
phani_yelugula
<%@ 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


op 想要 yyyy-MM-dd HH:mm:ss 而不是 dd/MM/yyyy
p
pb2q
Date td = new Date();
String b = new String("");
SimpleDateFormat format = new SimpleDateFormat("YYYY/MM/dd");
b = format.format(td);
out.println(b);           

D
Dave Hill

上面显示使用 ...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>

我的回答是正确的。您的问题只是因为您使用的是 10 年前已弃用的 JSTL 原型库而不是较新的原型库。在 2003 年 11 月左右,JSTL 1.1 引入了路径中带有 /jsp 的较新的 taglib URI。我们已经在 2011 年了。弄清楚你是如何过时的......让你自己和你的图书馆保持最新。
H
Hiren Odedra
<%@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>

请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅 here
P
Paul D. Waite

您可以使用 SimpleDateFormat 类来做到这一点。

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

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

我假设反对票是针对 a) 使用 scriptlet 和 b) 甚至不使用插入符号/返回格式化的日期和 c) 尽管 fmt:formatDate 答案是更好的选择,但它是公认的答案。至少这就是为什么我很想投反对票的原因。
在 JSP 中最好使用标签。 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fmt:formatDate value="${bean.date}" pattern="yyyy-MM-dd HH:mm:ss" />
投票最多的答案是将 Java Date 对象转换为在 JSP 中显示。但是问题是当 Date 对象从 JSP 返回到后端(可能是 Java 类)时,如何将其格式转换为更易读的模式。所以我认为这个答案确实给出了这个问题的答案(很明显,因为这是公认的)。
@Prime:Fri May 13 2011 19:59:09 GMT 0530 (India Standard Time) 格式是 Date#toString() 的典型格式,这意味着他手头已经有一个 java.util.Date 对象,它不可能来自 JSP 文件,因为 HTTP 请求参数始终是 java.lang.String(即使这样,转换StringDate 需要 SimpleDateFormat 的知识,而 OP 显然没有,否则他根本不会问这个问题)。