在Java中将字符串转换为日期 – 时区
我有一个String, 2013-10-07T23:59:51.205-07:00
,想把它转换成Java日期对象。 我正在解析错误。
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2013-10-07T23:59:51.205-07:00");
尝试
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ") .parse("2013-10-07T23:59:51.205-0700");
Z不是文字,时区没有冒号
请参阅http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html上的示例
如果正在使用java7,那么Z
可以用X
替换,时区可以有冒号
Z
不应该在引号内。 我认为Z
不适用于你给定的时区。 在Java 7之前,我想没有任何格式来解析带有冒号的ISO 8601格式时区。 你应该使用-0700
。
但是,从Java 7开始,您可以选择使用X
而不是Z
来解析ISO 8601格式时区 。 请参阅SimpleDateFormat
javadoc。 只需使用以下格式:
// This would work from Java 7 onwards date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX") .parse("2013-10-07T23:59:51.205-07:00");
您的模式有误,您应该使用以下内容:
date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") .parse("2013-10-07T23:59:51.205-07:00");
“X”表示ISO 8601格式的时区,如此处的String
:’。205-07:00′
有关更多信息,请阅读doc: SimpleDateFormat
使用此技巧解析ISO8601日期时间格式。 我承认没有尝试过毫秒级的字符串值,这可能会给你带来额外的麻烦。 这适用于Java6。
import javax.xml.bind.DatatypeConverter; Calendar cal = DatatypeConverter.parseDateTime(strDatetime);
如果我记得正确的cal实例可能不使用系统默认时区。 它初始化为原始字符串值timezone。 如果您希望实例使用系统时区,则可以执行此转换。
long ts = cal.getTimeInMillis(); cal = Calendar.getInstance(); cal.setTimeInMillis(ts);
您应该使用XXX
格式-07:00
,而不是Z
和X
Date sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") .parse("2013-10-07T23:59:51.205-07:00");
看看这个文档的例子。
问题是-07:00
不是有效的时区。 时区应具有此格式 ,例如-0800
。