Como analisar mês de forma completa cadeia de caracteres usando DateFormat em Java?
-
19-09-2019 - |
Pergunta
Eu tentei isso:
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
Date d = fmt.parse("June 27, 2007");
erro:
Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"
O java docs dizer que eu deveria usar quatro personagens para combinar o formulário completo.Eu sou apenas capaz de usar MMM com êxito com abreviado meses como "Jun" mas eu preciso corresponder de forma completa.
Texto:Para a formatação, se o número de padrão de letras é de 4 ou mais, o de forma completa é utilizado;caso contrário, a uma curta ou de forma abreviada, é usado se disponível.Para a análise, ambas as formas são aceito, independente do número de padrão de letras.
http://java.sun.com/j2se/1.6.0/docs/api/java/text/SimpleDateFormat.html
Solução
Você provavelmente está usando um local onde os nomes do mês não são "janeiro", "fevereiro", etc. Mas algumas outras palavras no seu idioma local.
Tente especificar o local que você deseja usar, por exemplo Locale.US
:
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27, 2007");
Além disso, você tem um espaço extra na string de data, mas na verdade isso não afeta o resultado. Funciona de qualquer maneira.
Outras dicas
Apenas a parte superior até o novo Java 8 API:
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("MMMM dd, yyyy").toFormatter();
TemporalAccessor ta = formatter.parse("June 27, 2007");
Instant instant = LocalDate.from(ta).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date d = Date.from(instant);
assertThat(d.getYear(), is(107));
assertThat(d.getMonth(), is(5));
Um pouco mais detalhado, mas você também ver que os métodos de Data utilizado estão fora de uso ;-) Hora de passar.