Mi objetivo es tener un análisis estricto (y prohibir fechas como '98/99 ', por ejemplo). Sin embargo, el siguiente código plantea una java.text.ParseException
con la fecha unparseable mensaje : "98/01":¿Cómo se analiza estrictamente una fecha con solo un año y un número de semana cuando el primer día de esta semana es el año anterior?
SimpleDateFormat sdf = new SimpleDateFormat("yy/ww");
sdf.setLenient(false);
sdf.parse("98/01");
Este es de hecho para el first week of 1998, que comienza el jueves. Sin embargo, el análisis sintáctico de una semana siempre devuelve la fecha del primer día de esta semana. En ese caso, sería 12/29/1997. Y esta es la razón por la cual se plantea una excepción.
Parece que este problema viene de la clase GregorianCalendar
y más concretamente a partir del método computeTime()
que comprueba si los campos originales coinciden con los campos impuesta externamente cuando el análisis es no indulgente:
if (!isLenient()) {
for (int field = 0; field < FIELD_COUNT; field++) {
if (!isExternallySet(field)) {
continue;
}
if (originalFields[field] != internalGet(field)) {
// Restore the original field values
System.arraycopy(originalFields, 0, fields, 0, fields.length);
throw new IllegalArgumentException(getFieldName(field));
}
}
}
¿Es esta una ¿error? Creo que el análisis 1998/01 debería devolver 12/29/1997 y no generar ninguna excepción. Sin embargo, ¿sabe cómo hacer que el análisis devuelva 01/01/1998 (que sería el primer día de la semana en el año especificado)?
¿Has probado "Yoda time" lib? Yo personalmente no, pero escuché que es superior a las clases de fecha/hora de JDK. –
Lo probé [Joda Time] (http://joda-time.sourceforge.net/), pero no pude hacerlo funcionar. –