Como analisar mês de forma completa cadeia de caracteres usando DateFormat em Java?

StackOverflow https://stackoverflow.com/questions/2219139

  •  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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top