DateTimeFormat.ISO不安全兼容ISO 8601

spring中
DateTimeFormat.ISO DATE_TIME
Format  yyyy-MM-dd'T'HH:mm:ss.SSSZ, e.g. "2000-10-31T01:30:00.000-05:00".

js中toISOString()返回‘2017-02-21T03:20:59.540Z’,格式标准为ISO 8601。
如果为UTC时间,可以直接在末尾添加“Z” 表示0时区,此时SPRING会解析失败。

方法一
Calendar canlendar = javax.xml.bind.DatatypeConverter.parseDateTime("2010-01-01T12:00:00Z");
Date dt = canlendar.getTime();
String formatted = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
                .format(dt);

方法二
使用 Joda-Time  

方法三
    /** Transform ISO 8601 string to Calendar. */
    public static Calendar toCalendar(final String iso8601string)
            throws ParseException {
        Calendar calendar = GregorianCalendar.getInstance();
        String s = iso8601string.replace("Z", "+00:00");
        try {
            s = s.substring(0, 22) + s.substring(23);  // to get rid of the ":"
        } catch (IndexOutOfBoundsException e) {
            throw new ParseException("Invalid length", 0);
        }
        Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s);
        calendar.setTime(date);
        return calendar;
    }


你可能感兴趣的:(java)