Trabalhando com Datas

seguinte estou com uma dúvida… escrevi um código simples que recebe o dia da semana (1 - domingo, 2 - segunda, 3 - terça, …), a semana do ano (1 à 52) e o ano, e com isso deve me retornar a data do dia (DD/MM/AAAA), porém para alguns dá certo outros não… vejam abaixo:
dia…semana… ano … resultado
1 1 2007 07/01/2007
2 1 2007 01/01/2007
3 1 2007 02/01/2007

1 1 2006 01/01/2006
2 1 2006 26/12/2005
3 1 2006 27/12/2005
não sei porque ocorre isto, tenho q tratar a data?? segue o código abaixo:

[code]
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.SimpleTimeZone;

public class Informa_Data {

public static int temp_semana;

public static int temp_ano;

public static int temp_diaSemana;

public static void main(String args[]) {

	// Cria uma TIME ZONE correspondente ao horário de Brasília
	SimpleTimeZone pdt = new SimpleTimeZone(-3 * 60 * 60 * 1000, "GMT-3:00");

	// Seta as regras para o horário de verão Brasileiro
	// Começando no primeiro domingo após o dia primeiro
	pdt.setStartRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, 0);

	// Terminando no último domingo do mês de Fevereiro
	pdt.setEndRule(Calendar.FEBRUARY, -1, Calendar.SUNDAY, 0);

	// create a GregorianCalendar with the Pacific Daylight time zone
	// and the current date and time
	Calendar calendar = new GregorianCalendar(pdt);

	temp_diaSemana = Console.readInt("Insira o dia da semana: ");
	temp_semana = Console.readInt("Informe a semana: ");
	temp_ano = Console.readInt("Informe o ano: ");

	calendar.set(Calendar.YEAR, temp_ano);

	calendar.set(Calendar.WEEK_OF_YEAR, temp_semana);

	calendar.set(Calendar.DAY_OF_WEEK, temp_diaSemana);

	String ret = "Data: " + calendar.get(Calendar.DAY_OF_MONTH) + "/"
			+ (calendar.get(Calendar.MONTH) + 1) + "/"
			+ calendar.get(Calendar.YEAR) + " - Semana: "
			+ calendar.get(Calendar.WEEK_OF_YEAR) + " - Dia Semana: "
			+ calendar.get(Calendar.DAY_OF_WEEK) + " - Ano: "
			+ calendar.get(Calendar.YEAR);
	
	System.out.println(ret);

	String formato = "dd/MM/yyyy";
	SimpleDateFormat formatter = new SimpleDateFormat(formato);
	System.out.println("A data formatada é: "
			+ formatter.format(calendar.getTime()));

}

}[/code]

[quote=M_Fulan]seguinte estou com um problema… escrevi um código simples que recebe o dia da semana (1 - domingo, 2 - segunda, 3 - terça, …), a semana do ano (1 à 52) e o ano, e com isso deve me retornar a data do dia (DD/MM/AAAA), porém para alguns dias funciona para outros não:
dia - semana - ano - resultado
1 - 1 - 2005 ==> 02/01/2005 ==> OK
2 - 1 - 2005 ==> 27/12/2004 ==> o correto é 03/01/2005
3 - 1 - 2005 ==> 28/12/2004 ==> o correto é 04/01/2005
4 - 1 - 2005 ==> 29/12/2004 ==> o correto é 05/01/2005
5 - 1 - 2005 ==> 30/12/2004 ==> o correto é 06/01/2005
6 - 1 - 2005 ==> 31/12/2004 ==> o correto é 07/01/2005
7 - 1 - 2005 ==> 01/01/2005 ==> o correto é 08/01/2005
1 - 2 - 2005 ==> 09/01/2005 ==> OK

ou seja, so funciona os domingo… alguém já enfrentou este problema ??

[code]
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.SimpleTimeZone;

public class Informa_Data {

public static int temp_semana;

public static int temp_ano;

public static int temp_diaSemana;

public static void main(String args[]) {

	// Cria uma TIME ZONE correspondente ao horário de Brasília
	SimpleTimeZone pdt = new SimpleTimeZone(-3 * 60 * 60 * 1000, "GMT-3:00");

	// Seta as regras para o horário de verão Brasileiro
	// Começando no primeiro domingo após o dia primeiro
	pdt.setStartRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, 0);

	// Terminando no último domingo do mês de Fevereiro
	pdt.setEndRule(Calendar.FEBRUARY, -1, Calendar.SUNDAY, 0);

	// create a GregorianCalendar with the Pacific Daylight time zone
	// and the current date and time
	Calendar calendar = new GregorianCalendar(pdt);

	temp_diaSemana = Console.readInt("Insira o dia da semana: ");
	temp_semana = Console.readInt("Informe a semana: ");
	temp_ano = Console.readInt("Informe o ano: ");

	calendar.set(Calendar.YEAR, temp_ano);

	calendar.set(Calendar.WEEK_OF_YEAR, temp_semana);

	calendar.set(Calendar.DAY_OF_WEEK, temp_diaSemana);

	String ret = "Data: " + calendar.get(Calendar.DAY_OF_MONTH) + "/"
			+ (calendar.get(Calendar.MONTH) + 1) + "/"
			+ calendar.get(Calendar.YEAR) + " - Semana: "
			+ calendar.get(Calendar.WEEK_OF_YEAR) + " - Dia Semana: "
			+ calendar.get(Calendar.DAY_OF_WEEK) + " - Ano: "
			+ calendar.get(Calendar.YEAR);
	
	System.out.println(ret);

	String formato = "dd/MM/yyyy";
	SimpleDateFormat formatter = new SimpleDateFormat(formato);
	System.out.println("A data formatada é: "
			+ formatter.format(calendar.getTime()));

}

}[/code]
[/quote]

m_fulan,

Para trabalhar com datas de modo sério, recomendo que você use o JodaTime.