我在这个网站上遵循了一些其他解决方案来解决这个难题,我没有安装Joda Time,但我仍然不知道为什么会失败。
正如一个解决方案所述,我也尝试去除冒号,但这没有帮助。
currentNode.getProperty("jcr:created").getString()
= 2013-03-07T11:57:08.596-05:00
我收到此错误: java.text.ParseException:无法解析的日期:“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);
%>
答案 0 :(得分:12)
格式为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's javadoc。
如果您的jdk不允许X模式,则必须修复输入字符串以删除:
。这可以使用正则表达式完成:
currentDate = currentDate.replaceAll(":(\\d\\d)$", "$1")
答案 1 :(得分:2)
在醉酒机器人测试解决方案后,我发现半小时的时区不起作用,例如-0530 (India).
因此改进的答案是:
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
请注意最后添加的XX
,现在也考虑了几分钟。
答案 2 :(得分: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()); %>
因此,它将消除将String转换为Date然后执行剩余操作的需要。希望这会有所帮助。