/ / Comportamiento extraño de ww SimpleDateFormat - java, parsing, simpledateformat

Extraño comportamiento de ww SimpleDateFormat - java, parsing, simpledateformat

¿Alguien puede explicar por qué obtengo esos valores al intentar analizar una fecha? He intentado tres entradas diferentes, como sigue:

1) Tercera semana de 2013

Date date = new SimpleDateFormat("ww.yyyy").parse("02.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));

Qué salidas: 02.2013 (como yo esperaba)

2) Primera semana de 2013

Date date = new SimpleDateFormat("ww.yyyy").parse("00.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));

Qué salidas: 52.2012 (lo que está bien para mí, ya que la primera semana de 2013 también es la última de 2012)

3) Segunda semana de 2013

Date date = new SimpleDateFormat("ww.yyyy").parse("01.2013");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + "." + cal.get(Calendar.YEAR));

Qué salidas: 1.2012 (lo que hace absolutamente no sentido para mí

¿¿Alguien sabe por qué pasa esto?? Necesito analizar una fecha en el formato (semana del año). (Año). ¿Estoy usando el patrón equivocado?

Respuestas

16 para la respuesta № 1

Usted está usando ww, que es "semana de semana-año", pero luego yyyy que es "año calendario" en lugar de "año de la semana". Configurar el año de la semana de la semana y luego el año del calendario es una receta para los problemas, ya que son solo sistemas de numeración separados, de manera efectiva.

Deberías estar usando YYYY en su cadena de formato para especificar el año de la semana ... aunque desafortunadamente parece que no puede "t" obtener El valor de una manera sana. (Yo esperaría un Calendar.WEEKYEAR constante, pero no hay tal cosa.)

Además, los valores de la semana del año comienzan en 1, no 0 ... y ninguna semana está en dos años-semana; sus ya sea la primera semana de 2013 o Es la última semana de 2012 ... no son ambas.

Personalmente, evitaría usar semanas y años si es posible, ya que pueden ser muy confusos, especialmente cuando una fecha en un año calendario es en un año de semana diferente.


2 para la respuesta № 2

Utilizar Calendar.getWeekYear () para obtener el valor del año sincronizado con Calendar.WEEK_OF_YEAR campo. Hay más información sobre la Semana del Año y el Año de la Semana en el Calendario Gregoriano Doc.