将字符串转换为日期,差不多完成了!

Cyr*_* N. 2 java paypal date

可能重复:
将符合ISO8601的字符串转换为java.util.Date

我正在尝试转换此字符串:

2011-06-07T14:08:59.697-07:00
Run Code Online (Sandbox Code Playgroud)

到Java日期,到目前为止,这是我做的:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S");
Date date1 = sdf.parse("2011-06-07T14:08:59.697", new java.text.ParsePosition(0));
Run Code Online (Sandbox Code Playgroud)

几乎一切都很好,除了最重要的部分,时区 !! SimpleDateFormat的问题在于它期望TimeZone in +/-hhmm和我的+/-hh:mm格式.

另外,我不知道为什么,这有效:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S Z");
Date date1 = sdf.parse("2011-06-07T14:08:59.697 -0700", new java.text.ParsePosition(0));
Run Code Online (Sandbox Code Playgroud)

但这不是(时区之前的空间):

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SZ");
Date date1 = sdf.parse("2011-06-07T14:08:59.697-0700", new java.text.ParsePosition(0));
Run Code Online (Sandbox Code Playgroud)

将此日期2011-06-07T14:08:59.697-07:00转换为Java日期的正确格式是什么?

谢谢你的帮助!

Jes*_*per 5

这看起来像在ISO中使用的ISO 8601标准日期和时间格式.不幸的是,Java SimpleDateFormat不能正确支持这种格式,因为它无法处理时区中的冒号.

但是,该javax.xml包包含可以处理此格式的类.

String text = "2011-06-07T14:08:59.697-07:00";
XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar(text);
Run Code Online (Sandbox Code Playgroud)

如果您需要它,java.util.Calendar那么您可以调用toGregorianCalendar()它:

Calendar c2 = cal.toGregorianCalendar();
Run Code Online (Sandbox Code Playgroud)

当然,你可以得到一个java.util.Date:

Date date = c2.getTime();
Run Code Online (Sandbox Code Playgroud)

您还可以使用流行的Joda Time库,它本身支持这种格式(并且具有比Java标准库更好的处理日期和时间的API).