String temp_date="07/28/2011 11:06:37 AM";
Date date = new Date(temp_date); //Depricated
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss");
String comp_date= sdf.format(date);
System.out.println(comp_date);
这有效,但如果我使用这样的东西
String temp_date="07/28/2011 11:06:37 AM";
try{
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss");
Date comp_date= sdf.parse(temp_date);
System.out.println(comp_date);
}catch(Exception e){
System.out.println(e);
}
抛出此异常:
java.text.ParseException: Unparseable date: "07/28/2011 11:06:37 AM"
答案 0 :(得分:11)
您的解析模式错误。它与日期字符串表示形式不匹配。 MMM
表示3个字母的本地月份缩写,而您的实际日期中有2位数的月份编号,则需要MM
。您还将/
斜杠设为日期/月/年分隔符,而不是-
。对于AM / PM标记,您之后还需要a
,以便可以解析正确的hh
。
这应该有效:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
有关这些模式的说明,请阅读SimpleDateFormat
javadoc。
我相信您的具体功能要求是将模式MM/dd/yyyy hh:mm:ss a
指定的给定日期字符串转换为另一种日期字符串格式,由模式MMM-dd-yyyy hh:mm:ss
指定。在这种情况下,您应该有两个SimpleDateFormat
实例,一个将给定模式中的字符串解析为Date
,另一个实例将解析后的Date
格式化为给定模式。这应该做你想要的:
String inputDate = "07/28/2011 11:06:37 AM";
Date date = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a").parse(inputDate);
String outputDate = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss").format(date);
System.out.println(outputDate); // Jul-28-2011 11:06:37
请注意,我将输出中的hh
更改为HH
,因为否则会以1-12小时的方式结束,而不会使用 AM / PM标记。 HH
表示为0-23小时。
答案 1 :(得分:1)
您为SimpleDateFormat提供的格式在月,日和年之间使用-
。你的字符串使用斜杠。
答案 2 :(得分:1)
初看起来,看起来你的格式字符串是错误的。
MMM - 你为这个月指定了这个,但你没有通过3个月的月份。
尝试MM,看看是否有帮助。
请查看此处了解更多日期格式信息:
http://www.java2s.com/Tutorial/Java/0040__Data-Type/SimpleDateFormat.htm