@ OleV.V. Да, ThreeTenABP работает на меня. Спасибо. :)

я проблемы с анализом дат в Java. Ниже приведен код.

 String dateString = "2017-12-13T16:49:20.730555904Z";
 List<String> formatStrings = Arrays.asList("yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'");

    for (String formatString : formatStrings)
    {
        try
        {
            SimpleDateFormat formatter = new SimpleDateFormat(formatString);
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
            Date d = formatter.parse(dateString);
            System.out.println("Format is:" + formatString);
            System.out.println("Orignal Date: " + d);
            System.out.println("Orignal MS: " + d.getTime());

            return d;
        }
        catch (ParseException e) {}
    }

    return null;
}

Когда я запускаю эту программу, я получаю следующий вывод.

Format is:yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'
Orignal Date: Fri Dec 22 03:45:15 UTC 2017
Orignal MS: 1513914315904

Я не уверен, почему это дает мне22 декабря когда это должно быть13 декабря, Но если я изменю свою дату ввода на это.

String dateString = "2017-12-13T16:49:20.7Z";

т.е. только один символ перед Z. тогда я получаю правильный вывод.

Format is:yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'
Orignal Date: Wed Dec 13 16:49:20 UTC 2017
Orignal MS: 1513183760007

Это дает мне правильный вывод до 3 чисел перед Z. Если больше чем 3 числа, то я получил неправильный вывод.

Было бы замечательно, если бы кто-то мог указать мне, что мне здесь не хватает.

PS: я разбираю эти даты в Android. Я установил минимальный уровень API на 16, а java.time недоступен для уровня API ниже 26.

Ответы на вопрос(1)

Ваш ответ на вопрос