Joda - DateTime

6 respostas
Marques

Colegas,

Entro com a data 20/01/2008 no meu formulário e preciso recuperar a semana a qual essa data pertence.
Acontece que o segundo código abaixo me devolve domingo como 7 , quando aki no Brasil é 1 (primeiro dia da semana).

Usando a classe Calendar o trecho abaixo devolve domingo como 1, mas eu tenho que usar o joda para obter o mesmo resultado.

Vc pode me ajudar?

Muito obrigado,

Marques

Calendar calendar = Calendar.getInstance();
		calendar.setFirstDayOfWeek(Calendar.SUNDAY);
		calendar.setTime(dataProducao);
		int ano = calendar.get(Calendar.YEAR);		
		int semana = calendar.get(Calendar.WEEK_OF_YEAR);
		int diaSemana = calendar.get(Calendar.DAY_OF_WEEK);

Usando DateTime, como fazer para devolver domingo como 1?

DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yyyy");
		DateTime data = fmt.parseDateTime(dataProducao);

		System.out.println("DIA DA SEMANA " + data.getDayOfWeek()); //Devolve 7 e deveria voltar 1 aki no Brasil
		System.out.println("SEMANA " + data.getWeekOfWeekyear());
		System.out.println("MES " + data.getMonthOfYear());
		System.out.println("ANO " + data.getYear());

6 Respostas

T

Amigo, nem sabia que calendar.get(Calendar.DAY_OF_WEEK) retornava 1 para domingo.

Que eu saiba, ele retorna Calendar.SUNDAY (cujo valor numérico casualmente é um, mas você não deveria nunca supor que é 1.
Se você me mostrar um código do tipo "if (calendar.get(Calendar.DAY_OF_WEEK) == 1), não vou saber que você se está referindo ao domingo).

Da mesma forma, não pense em data.getDayOfWeek() retornando 7 para domingo. Você tem de pensar que ele retorna DateTimeConstants.SUNDAY para domingo. Se o valor é 7 em vez de 1, isso é por convenção (ISO).

T

De qualquer maneira, se você tem de converter para Calendar.SUNDAY o valor DateTimeConstants.SUNDAY, aqui vai um código:

public static int dtc2cal (int dtc) {
    switch (dtc) {
        case DateTimeConstants.SUNDAY: return Calendar.SUNDAY;
        case DateTimeConstants.MONDAY: return Calendar.MONDAY;
        ... etc....
    }
}
Marques

Prezado thingol,

Obrigado pelas dicas, vc está corretissimo porém o que busco na verdade é um equivalente para

calendar.setFirstDayOfWeek(Calendar.SUNDAY);

Acredito que tenha algo a ver com Locale, mas é apenas uma suposição
Veja bem: dependendo do primeiro dia da semana posso ter uma mesma data caindo em uma semana no formato eurupeu ou outra no brasil.

Entendeu?

T

Entendi sim, mas a documentação do Joda-Time diz apenas que o valor retornado para domingo é sempre DateTimeConstants.SUNDAY, e que para ele o primeiro dia da semana é sempre segunda-feira, segundo o padrão ISO. Você vai ter de usar java.util.Calendar mesmo, se quiser saber que o primeiro dia da semana aqui no Brasil é SUNDAY, e na Alemanha é MONDAY.

T

Ou então pode usar isto aqui:
Territory.getFirstDayOfWeek()

Marques

Prezado thingol,

Valew pelas dicas. Vou usar o calendar conforme recomendado por vc.
Muito obrigado mesmo!

Criado 7 de fevereiro de 2008
Ultima resposta 7 de fev. de 2008
Respostas 6
Participantes 2