SimpleDateFormat的原因不明的ParseException

时间:2012-11-26 22:17:59

标签: java simpledateformat

我正在尝试解析以"01-26-2012 03:07 AM"格式显示的日期。

我创建了这个SimpleDateFormat

private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a");

然而,每当我解析以下内容时:

String date = "01-26-2012 03:07 AM";
Date myDate =  DATE_FORMAT.parse(date.trim()); 

我得到ParseException

  

java.text.ParseException:Unparseable date:“01-26-2012 03:07 AM”       在java.text.DateFormat.parse(DateFormat.java:337)

我的SimpleDateFormat字符串是否正确?还有什么可能阻止它解析吗?

2 个答案:

答案 0 :(得分:3)

很可能是区域设置问题。例如,如果您尝试使用英语语言环境,则应该可以使用:

DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH);

由于您未指定区域设置,因此使用系统的默认区域设置,并且可能无法正确解析“AM”。

以下代码输出

  

myDate = Thu Jan 26 03:07:00 GMT 2012

public static void main(String[] args) throws Exception {
    String date = "01-26-2012 03:07 AM";
    DateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm a", Locale.ENGLISH);
    Date myDate = DATE_FORMAT.parse(date.trim());
    System.out.println("myDate = " + myDate);
}

作为旁注,例如,如果您将代码更改为Locale.CHINESE,则会出现解析异常。

答案 1 :(得分:0)

SimpleDateFormat用作静态对象是不正确的,因为它不是thread safe。我不能说这是问题,但可能是一个指针。