Gettar a semana do ano (WEEK_OF_YEAR) de um calendar

5 respostas
klebervirgilio

Boa Tarde!

Galéra, estou com um problema…
Seguinte

Preciso saber ql é o número da semana no ano, isso apartir de uma data… eis oq estou fazendo:

//Transforma a dt em String para números inteiros.
                int anoInicial = Integer.parseInt(xdataInicial.split("/")[2]);
		int mesInicial = Integer.parseInt(xdataInicial.split("/")[1]);
		int diaInicial = Integer.parseInt(xdataInicial.split("/")[0]);
		
		int anoFinal = Integer.parseInt(xdataFinal.split("/")[2]);
		int mesFinal = Integer.parseInt(xdataFinal.split("/")[1]);
		int diaFinal = Integer.parseInt(xdataFinal.split("/")[0]);
		
		Calendar calendar = new GregorianCalendar().getInstance();
	    
		calendar.set(Calendar.YEAR, 		anoInicial);
		calendar.set(Calendar.MONTH, 		mesInicial);
		calendar.set(Calendar.DAY_OF_YEAR,	diaInicial);
		
        	int semmanaIncial = calendar.get(Calendar.WEEK_OF_YEAR); //DEVERIA ME TRAZER A SEMANA DO ANO NÃO A DO MÊS, QUE É O Q ELE ESTÁ FAZENDO.
		
		calendar.set(Calendar.YEAR, 		anoFinal);
		calendar.set(Calendar.MONTH, 		mesFinal);
		calendar.set(Calendar.DAY_OF_YEAR,	diaFinal);
		
		int semmanaFinal = calendar.get(Calendar.WEEK_OF_YEAR);

Então, creio estar fazendo corretamente… o problema que ao invés de trazer um int correspondente a semana em relação ao ano ele me tráz em relação ao mês.
no
Ex: 01/01/2009 ------ calendar.get(Calendar.WEEK_OF_YEAR) ------ retorno 1
01/12/2009 ------ calendar.get(Calendar.WEEK_OF_YEAR) ------ retorno 1(primeira semana do mês)

Pf, me ajudem!

Obrigado!

5 Respostas

E
calendar.set(Calendar.DAY_OF_YEAR,  diaInicial);

Não seria

calendar.set(Calendar.DATE,  diaInicial);

?

(DAY_OF_YEAR é o tal do “dia juliano” que às vezes é necessário - por exemplo, 30/12/2010 é o dia 364.)

E

Outra coisinha … Não sete diretamente o valor de Calendar.MONTH com o número do mês. Se você olhar a documentação, vai ver que Calendar.JANUARY é zero, não 1, então você precisa subtrair 1 (por exemplo, Calendar.DECEMBER é 11, não 12).

E
import java.text.*;
import java.util.*;

class SemanaDoAno {

    // Note que a última semana do ano pode constar como "1" ou "53".
    // Se por acaso a última semana do ano constar como "1", você precisa fazer uma correção.
    // A forma mais simples é você verificar se o dia juliano é maior que 7, mas a semana é 1.
    // Se isso ocorrer, considere como 53.

    public static void main (String[] args) throws Exception {
        String[] datas = {
           "1/1/2010",   // semana 1
           "2/1/2010",   // semana 1
           "3/1/2010",   // semana 1
           "19/12/2010", // semana 51
           "26/12/2010", // semana 52
           "27/12/2010", // semana 1???
           "31/12/2010", // semana 1???
           "31/12/2009", // semana 1???
           "31/12/2008", // semana 1???
           "31/12/2007", // semana 1???
           "31/12/2006", // semana 53
           "31/12/2005", // semana 1???
           "31/12/2004", // semana 1???
           "31/12/2003", // semana 1???
           "31/12/2002", // semana 1???
           "31/12/2001", // semana 1???
           "31/12/2000"  // semana 53
        };
        DateFormat df = new SimpleDateFormat ("dd/MM/yyyy");
        Calendar cal = Calendar.getInstance();
        for (String data : datas) {
            Date dt = df.parse (data); 
            cal.setTime (dt);
            System.out.println ("A data " + df.format (dt) + " está na semana " + cal.get 

(Calendar.WEEK_OF_YEAR) + "(dia juliano: " + cal.get(Calendar.DAY_OF_YEAR) + ")");
        }
    }
}
G

Para que reinventar a roda? Parse e formatações devem ser usados com a classe SimpleDateFormat.

public static void main(String[] args)
        throws Exception {
        String minhaData = "25/12/2009";

        Date dt = new SimpleDateFormat("dd/MM/yyyy").parse(minhaData);

        // imprime o nome do dia da semana, exemplo: Quarta-feira
        System.out.println(new SimpleDateFormat("EEEE").format(dt));

        // imprime o dia da semana
        System.out.println(new SimpleDateFormat("w").format(dt));

        // imprime o dia da semana baseano no ano
        System.out.println(new SimpleDateFormat("W").format(dt));

    }
klebervirgilio

Galéra não testei todas as idéias postadas!
Mas… para mim funcionou dessa forma::

Calendar calendar = new GregorianCalendar(anoInicial,mesInicial-1,diaInicial); semmanaIncial = calendar.get(Calendar.WEEK_OF_YEAR);

Valeuu mesmooo pessoall!!!

Criado 12 de janeiro de 2010
Ultima resposta 12 de jan. de 2010
Respostas 5
Participantes 3