Erro de análise de data e hora

Estou tendo problemas ao analisar datas em Java. Abaixo está o código.

 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;
}

Quando executo este programa, obtenho a seguinte saída.

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

Não sei por que isso está me dando22 de dezembro quando deveria ser13 de dez. Mas se eu alterar minha data de entrada para isso.

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

ou seja, apenas um caractere antes do Z., em seguida, recebo a saída correta.

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

Dá-me a saída correta até 3 números antes do Z. Se mais de 3 números do que eu obtive a saída errada.

Seria ótimo se alguém pudesse me indicar o que estou perdendo aqui.

PS: Estou analisando essas datas no Android. Eu configurei o nível mínimo da API como 16 e java.time não está disponível para o nível da API abaixo de 26.

questionAnswers(1)

yourAnswerToTheQuestion