我正在尝试解析以"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
字符串是否正确?还有什么可能阻止它解析吗?
答案 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。我不能说这是问题,但可能是一个指针。