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.