Trabalhando com Datas

2 respostas
M

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:

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()));

	}
}

2 Respostas

M
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 ??

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()));

	}
}
mister_m

m_fulan,

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

Criado 15 de março de 2007
Ultima resposta 20 de mar. de 2007
Respostas 2
Participantes 2