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 № 1Você 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.