Semana do Ano vindo errado

9 respostas
mackson

Estou usando uma função para retornar a semana do ano de uma determinada data, mas o valor retornado é sempre o correto +1.

O código:

GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime( calendar.getTime() ); Integer valor = calendar.get(calendar.WEEK_OF_YEAR); System.out.println(valor.toString());

Por exemplo, meu Oracle diz que a semana do ano da data “2011-12-02” é “48”.
O meu código, se eu informar a mesma data, me retorna como “49”.

De fato o Oracle está correto, visto que, se eu colocar o último dia do ano “2011-12-31”, ele me retorna “53”, e o java me retorna “01”.

Alguém saberia me ajudar, ou me explicar esse comportamento?

Abr

9 Respostas

mauricionarcizo
Integer valor = calendar.get(calendar.WEEK_OF_YEAR -1);
mackson

Caro mauricionarcizo.

A solução proposta não é funcional, pois da forma que colocou não efetua o cálculo.
Mesmo que eu coloque na forma correta “Integer valor = calendar.get(calendar.WEEK_OF_YEAR) - 1;”, que é um POG, traria um resultado errado, pois no dia “31/12/2011”, ele me retorna “1”, e, logo subtraindo “-1” seria “0”.

Abr

mauricionarcizo

se é 0 logo a semana será 52

douglaskd

mackson:
Caro mauricionarcizo.

A solução proposta não é funcional, pois da forma que colocou não efetua o cálculo.
Mesmo que eu coloque na forma correta “Integer valor = calendar.get(calendar.WEEK_OF_YEAR) - 1;”, que é um POG, traria um resultado errado, pois no dia “31/12/2011”, ele me retorna “1”, e, logo subtraindo “-1” seria “0”.

Abr

ele esta certo…

a semana do java começa em 0

a do oracle começa em 1

mauricionarcizo

estranho o oracle retornar semana 53, os anos não tem 52 semanas?

douglaskd

bem estranho…o ano tem 52 semanas e 1 dia

mackson

Caro douglaskd,

De fato são 52 semanas e 1 dia. Estranho o Oracle retornar 53. Mais estranho ainda é o java retornar uma semana a mais!

pmlm

O ano não tem 52 semanas exactas. Para acertar, de vez em quando tem de haver um ano com 53 semanas.

http://en.wikipedia.org/wiki/ISO_week_date

douglaskd

isso é em portugal,

aqui no Brasil temos 1 semana a menos =)

Criado 2 de dezembro de 2011
Ultima resposta 2 de dez. de 2011
Respostas 9
Participantes 4