最佳答案
我试图将ISO8601格式的字符串转换为java.util.Date
。
如果与Locale(比较示例)一起使用,我发现模式yyyy-MM-dd'T'HH:mm:ssZ
符合ISO8601。
但是,使用java.text.SimpleDateFormat
,我无法转换格式正确的String2010-01-01T12:00:00+01:00
。我必须先将其转换为2010-01-01T12:00:00+0100
,没有冒号。
目前的解决方案是
SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.GERMANY);String date = "2010-01-01T12:00:00+01:00".replaceAll("\\+0([0-9]){1}\\:00", "+0$100");System.out.println(ISO8601DATEFORMAT.parse(date));
这显然不太好。我是错过了什么还是有更好的解决方案?
答案
感谢JuanZe的评论,我发现了Joda-Time的魔力,它也是这里描述。
所以解决办法是
DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();String jtdate = "2010-01-01T12:00:00+01:00";System.out.println(parser2.parseDateTime(jtdate));
或者更简单地说,通过构造函数使用默认解析器:
DateTime dt = new DateTime( "2010-01-01T12:00:00+01:00" ) ;
对我来说,这很好。