在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)
你似乎在混合z
和Z
的模式。 如果忽略(FLE Daylight Time)
,由于这与GMT+0300
信息相同,因此SimpleDateFormat
需要GMT +0300
或GMT+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.US
或Locale.UK
。