将符合 ISO 8601 标准的字符串转换为 java.util.Date
我正在尝试将ISO 8601格式的字符串转换为.java.util.Date
我发现如果与区域设置(比较示例)一起使用,则该模式符合ISO8601标准。yyyy-MM-dd'T'HH:mm:ssZ
但是,使用,我无法转换格式正确的字符串 。我必须首先将其转换为 ,不带冒号。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" ) ;
对我来说,这很好。