Java - Date构造函数接受日期字符串,但不建议使用。试过替代品,但没有运气

时间:2011-07-29 16:27:51

标签: java datetime date

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"

3 个答案:

答案 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