JodaTime - 如何将ISO 8601时间字符串解析为DateTime?

red*_*rom 1 datetime android iso jodatime datetime-parsing

我有以下格式的时间字符串:

2016-01-07T08:00:00+00:00
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下方法解析字符串时.

public static DateTime getDateTimeObject(String dateTime) {
        //DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(PATTERN);
        //DateTime dateTimeObj = dateTimeFormatter.parseDateTime(dateTime);
        Logger.d(dateTime);
        DateTime dateTimeObj = null;
        try {
            dateTimeObj = ISODateTimeFormat.dateTime().parseDateTime(dateTime);
            return dateTimeObj;
        } catch (Exception e) {
            Logger.e(e.getMessage());
        }
        return dateTimeObj;
    }
Run Code Online (Sandbox Code Playgroud)

我总是得到以下异常.

Invalid format: "2016-01-07T08:00:00+00:00" is malformed at "+00:00"
Run Code Online (Sandbox Code Playgroud)

如何解析ISO格式的字符串以获取有效的DateTime对象?

Jon*_*eet 6

您的值没有毫秒组件,因此您需要ISODateTimeFormat.dateTimeNoMillis():

返回一个格式化程序,它将完整的日期和时间组合在一起,没有毫秒,用'T'分隔(yyyy-MM-dd'T'HH:mm:ssZZ).

dateTime()方法返回格式化程序,格式化程序yyyy-MM-dd'T'HH:mm:ss.SSSZZ的字符串不符合该格式.