java.util.Date
。如果与Locale一起使用,则我发现模式yyyy-MM-dd'T'HH:mm:ssZ
符合ISO8601标准(请参考示例)。然而,使用
java.text.SimpleDateFormat
时,我无法将正确格式的字符串2010-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" ) ;
对我来说,这很好。