Dias Úteis

Estou precisando contar a quantidade de dias no mês somente sem os domingos.
Estou utilizando um método que quando é executado localmente no windows ele funciona corretamente, porém quando o mesmo é colocado no servidor(Linux) ele simplismente não funciona.
Alguém poderia me ajudar com isto.

Segue o método:

public static int getDiasUteis(String dtAtual) {
		int diasTrabalhados=0;
		int mes=0, dia=0, ano=0;
		try{
			DateFormat dtFormat = DateFormat.getDateInstance();
			Date dtAtualFormatada = dtFormat.parse(dtAtual);
			GregorianCalendar cal = new GregorianCalendar();
		    GregorianCalendar calInicial = new GregorianCalendar();   
		    GregorianCalendar calFinal = new GregorianCalendar();
		    cal.setTime(dtAtualFormatada); 
		    mes=cal.get(java.util.Calendar.MONTH)+1;
		    ano=cal.get(java.util.Calendar.YEAR);
		    int ultimoDia=0, primeiroDia=01;
			if(mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12){
				ultimoDia=31;
			}else if(mes==4 || mes==6 || mes==9 || mes==11){
				ultimoDia=30;
			}else if(mes==2){
				ultimoDia=28;
			}else{
				ultimoDia=0;
			}
			
			for( int i = 0; i <= ultimoDia; i++ ) {   
	            if( !( calInicial.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ) ) {   
	                diasTrabalhados++;   
	            }   
	            calInicial.add( Calendar.DATE, 1 );   
	        }         
	        return diasTrabalhados;   
			
			
		} catch (Exception e) {   
	    	 System.out.println("Erro: Datas.getDataFinal:" + e);  
	         return diasTrabalhados;
	    } 
	}

Bom dia amigo!

Algumas sugestões:

Use as contamtes de Mes existentes em Calendar, como por exemplo “Calendar.JULY” ao invés de especificar na mão mão…
Outro ponto, vc não precisa da informação do mes ‘na mão’… para saber a data máxima existente em um mes, vc pode usar
Calendar.getActualMaximum(Calendar.DAY_OF_MONTH) … ele já te retorna qual o maior dia existente dentro de um mes.

E não se esqueça de que o ano pode ser bissexto!

De uma olhada na documentação da classe Calendar… com certeza ela ira te ajudar!


		Calendar data1 = Calendar.getInstance();
		Calendar data2 = Calendar.getInstance();
		
		data1.set(2009,0,1,0,0,0);
		data2.set(2008,6,8,0,0,0);
		
		int dias = 0;		
		while (data1.after(data2)) {
			if (data1.get(Calendar.DAY_OF_WEEK)!= Calendar.SUNDAY) {
				dias++;
			}
			
			data1.add(Calendar.DATE, -1);
		}
		System.out.println(dias);

Acho que ainda cabe otimização.

Não tenho certeza, mas acho que dá pra subtrair uma data da outra, descobrir o número de dias e excluir os domingos com alguma matemática.

Ou assim:

		Calendar data1 = Calendar.getInstance();
		Calendar data2 = Calendar.getInstance();

		data1.set(2009,11,6,0,0,0);
		data2.set(2009,11,1,0,0,0);

		long dias = (data1.getTimeInMillis() - data2.getTimeInMillis()) / 86400000;
		dias = dias % 7;

		for (int i = 0; i < dias; i++) {
			if (data1.get(Calendar.DAY_OF_WEEK)== Calendar.SUNDAY) {
				dias--;
				break;
			}
			data1.add(Calendar.DATE, -1);
		}
		System.out.println(dias);

Repare que o outro algoritmo roda N vezes, sendo N o número de dias e esse roda no máximo 6 vezes no loop principal.

Valeu pessoal!
Com as dicas de vocês, consegui solucionar o meu problema.