5

我在这个网站上遵循了一些其他解决方案来解决这个困境,我没有安装 Joda Time,但我仍然不知道为什么会失败。

正如一种解决方案所述,我还尝试删除冒号,但这没有帮助。

currentNode.getProperty("jcr:created").getString()= 2013-03-07T11:57:08.596-05:00

我收到此错误:java.text.ParseException: Unparseable date: "2013-03-07T11:57:08.596-05:00"

<%@page import="
    java.util.Date,
    java.text.SimpleDateFormat,
    java.text.DateFormat"
%>
<%
    DateFormat outputFormat = new SimpleDateFormat("MMMM dd, yyyy");
    DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    String currentDate = currentNode.getProperty("jcr:created").getString();
    Date date = inputFormat.parse(currentDate); // <-- Failing here
    String currentDateString = outputFormat.format(date);
%>
4

3 回答 3

13

时区格式Z应该是-0500,不是-05:00

所以我建议你更换

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

有关可用格式的更多详细信息,请参阅SimpleDateFormat 的 javadoc

如果您的 jdk 不允许 X 模式,则必须修复输入字符串以删除:. 这可以通过正则表达式来完成:

currentDate = currentDate.replaceAll(":(\\d\\d)$", "$1")
于 2013-03-19T16:55:44.377 回答
2

在醉酒机器人测试解决方案后,我发现半小时的时区不起作用,比如-0530 (India).

因此,改进的答案是:

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

注意最后添加XX的,现在也考虑了分钟。

于 2016-04-15T05:53:09.340 回答
0

尽管已经回答了这个问题,但如果您的要求只是以“MMMM dd,yyyy”格式显示创建日期,还有另一种方法可以实现该解决方案。

Property 对象有一个 getDate() 方法,它返回一个 Calendar 对象,可以使用 getTime() 从中获取日期对象。

因此,如果重写如下所示,上面的代码将起作用。

<%@ page import="java.util.Calendar,
    java.text.SimpleDateFormat,
    java.text.DateFormat" %>
<%
DateFormat outputFormat = new SimpleDateFormat("MMMM dd, yyyy");
Calendar currentDate = currentNode.getProperty("jcr:created").getDate();
String currentDateString = outputFormat.format(currentDate.getTime()); %>

因此,它将消除将字符串转换为日期然后执行剩余操作的需要。希望这可以帮助。

于 2013-03-20T04:08:45.207 回答