simple - Cómo analizar el formato completo de un mes de cadena utilizando DateFormat en Java?
simpledateformat month name (2)
Probablemente esté utilizando una configuración regional donde los nombres de los meses no sean "enero", "febrero", etc., sino algunas otras palabras en su idioma local.
Intente especificar la configuración regional que desea usar, por ejemplo Locale.US
:
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
Date d = fmt.parse("June 27, 2007");
Además, tiene un espacio adicional en la cadena de fecha, pero en realidad esto no tiene ningún efecto en el resultado. Funciona de cualquier manera.
Lo intenté
DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
Date d = fmt.parse("June 27, 2007");
Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"
Los documentos de Java dicen que debería usar cuatro caracteres para que coincida con el formulario completo. Solo puedo usar MMM con éxito con meses abreviados como "Jun", pero necesito que coincida con la forma completa.
Texto: para formatear, si el número de letras de patrón es 4 o más, se utiliza el formulario completo; de lo contrario, se usa una forma abreviada o abreviada, si está disponible. Para el análisis sintáctico, se aceptan ambas formas, independientemente del número de letras de patrón.
http://java.sun.com/j2se/1.6.0/docs/api/java/text/SimpleDateFormat.html
Solo para completar esto con la nueva API de Java 8:
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));
Un poco más detallado, pero también se ve que los métodos de Date utilizados están en desuso ;-) Es hora de seguir adelante.