/ / Comportamento estranho de ww SimpleDateFormat - java, parsing, simpledateformat

Comportamento estranho de ww SimpleDateFormat - java, parsing, simpledateformat

Alguém pode explicar por que obtenho esses valores ao tentar analisar uma data? Eu tentei três entradas diferentes, da seguinte maneira:

1) Terceira 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));

Quais saídas: 02.2013 (como eu esperava)

2) Primeira 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));

Quais saídas: 52.2012 (o que é bom para mim, já que a primeira semana de 2013 também é a ú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));

Quais saídas: 1.2012 (o que torna absolutamente não sentido para mim)

Alguém sabe por que isso acontece ?? Preciso analisar uma data no formato (semana do ano). (Ano). Estou usando o padrão errado?

Respostas:

16 para resposta № 1

Você está usando ww, que é "semana da semana-ano", mas então yyyy que é "ano civil" em vez de "ano semanal".Definir a semana do ano e, em seguida, definir o ano civil é uma receita para problemas, porque eles são apenas sistemas de numeração separados, efetivamente.

Você deveria estar usando YYYY em sua string de formato para especificar a semana-ano ... embora, infelizmente, pareça que você não pode obter o valor de uma forma sensata. (Eu esperaria um Calendar.WEEKYEAR constante, mas não existe tal coisa.)

Além disso, os valores da semana do ano começam em 1, não 0 ... e nenhuma semana ocorre em dois anos da semana; Está ou a primeira semana de 2013 ou é a última semana de 2012 ... não são as duas coisas.

Eu pessoalmente evitaria usar semanas e anos, se possível - eles podem ser muito confusos, especialmente quando uma data em um ano civil está em um ano semanal diferente.


2 para resposta № 2

Usar Calendar.getWeekYear () para obter o valor do ano sincronizado com Calendar.WEEK_OF_YEAR campo. Há mais informações sobre a semana do ano e a semana do ano no Calendário gregoriano doc.