在Java中将字符串解析为日期

我正在尝试将字符串解析为日期,这就是我所拥有的:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)"); Date date = new Date(); try { date = sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } 

要解析的字符串是这样的:

 Sun Jul 15 2012 12:22:00 GMT+0300 (FLE Daylight Time) 

我关注了http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

很确定我已经完成了本书的所有工作。 但它给了我ParseException

 java.text.ParseException: Unparseable date: "Sun Jul 15 2012 12:22:00 GMT+0300 (FLE Daylight Time)" 

我究竟做错了什么? 我试过的模式:

 EEE MMM dd yyyy HH:mm:ss zzz EEE MMM dd yyyy HH:mm:ss zZ (zzzz) 

你似乎在混合zZ的模式。 如果忽略(FLE Daylight Time) ,由于这与GMT+0300信息相同,因此SimpleDateFormat需要GMT +0300GMT+03:00 。 最后一个变体可以像这样解析:

 String time = "Sun Jul 15 2012 12:22:00 GMT+03:00 (FLE Daylight Time)"; SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzz"); Date date = sdf.parse(time); 

[编辑]
根据关于其时间字符串工作的其他post,这可能是因为您的时间字符串包含冲突的信息或混合格式。

试试这种方式..

 System.out.println(new SimpleDateFormat( "EEE MMM dd yyyy HH:mm:ss zZ (zzzz)").format(new Date())); 

输出我得到:

 Thu Jul 12 2012 12:41:35 IST+0530 (India Standard Time) 

您可以尝试打印日期格式字符串:

 /** * @param args */ public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat( "EEE MMM dd yyyy HH:mm:ss zZ (zzzz)"); Date date = new Date(); try { // System.out.println(sdf.format(date)); date = sdf.parse(time); } catch (Exception e) { e.printStackTrace(); } } 

如果您在使用区域设置时遇到问题,则可以为整个应用程序设置默认区域设置

 Locale.setDefault(Locale.ENGLISH); 

或者只是在SimpleDateFormat上使用英语语言环境

 SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zZ (zzzz)", Locale.ENGLISH); 

您还可以使用Locale.USLocale.UK