3

我正在尝试解析格式中出现的日期"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:无法解析的日期:“01-26-2012 03:07 AM”在 java.text.DateFormat.parse(DateFormat.java:337)

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

4

2 回答 2

3

这很可能是语言环境问题。例如,如果您尝试使用英语语言环境,它应该可以工作:

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

由于您没有指定语言环境,因此使用系统的默认语言环境,并且“AM”可能无法正确解析。

下面的代码输出

myDate = 2012 年 1 月 26 日星期四 03:07:00 GMT

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为例如,您将得到一个解析异常。

于 2012-11-26T22:20:01.310 回答
0

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

于 2012-11-26T23:34:45.507 回答