[Dúvida] Incrementar um Date e Retornar o valor

Olá pessoal!

Então, minha situação é a seguinte… Tenho duas variáveis do tipo Object que estão sendo utilizadas como Date (variáveis Object inicio, Object fim, por exemplo). O que eu preciso fazer, é pegar a data que está setada na variável inicio (que já vem preenchida), incrementar N dias, e setar esta nova data na variável fim.

Neste trecho de código-exemplo abaixo, ele traz todos os ‘valores’ de Date: “Fri Feb 03 00:00:00 AMT 2012”

Object inicio = ?; // Está como tipo Date, ele já vem com o valor preenchido, através de uma query, e vêm no formato 'yyyy-MM-dd'. 
Object fim = null;
long numeroDias = 10; // Recebe o valor por parâmetro, mas vamos tomar como sendo 10
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();
calendar.setTime((Date)inicio);
calendar.add(Calendar.DAY_OF_MONTH, (int)numeroDias);

String novaData = sdf.format(calendar.getTime());

fim = sdf.parse(novaData);

A pergunta é: como eu faço para realizar a conversão da String novaData para a variável fim (utilizando-a como Date), mantendo apenas a data no formato ‘yyyy-MM-dd’, sem o resto das informações? (Ex. Fri Feb 03 00:00:00 AMT 2012)

Eu preciso que seja desta forma, pois mais pra frente serão realizadas validações em cima destas datas, e como o código é [color=yellow]tosco[/color] antigo e acoplado, não posso fazer de outra maneira, muito menos refazê-lo.

E sim, a variável de numeroDias é inutilmente do tipo long :?

Espero que alguém possa me ajudar com essa dúvida, pois não consegui pensar em nada para deixar como preciso até então.

Agradeço desde já!

para resolver procure sobre o simpledateformat.

mas para trabalhar com datas facilmente, utilize o LocalDate do joda.time. Muito mais simples.

edit: vc já esta trabalhando com simpledateformat. Estes dados adicionais que vc quer é da classe Date, não tem como “não” utiliza-los. Se vc quiser imprimir de outra maneira utilize o simpledateformat tb.

[quote=RKrum]Olá pessoal!

Então, minha situação é a seguinte… Tenho duas variáveis do tipo Object que estão sendo utilizadas como Date (variáveis Object inicio, Object fim, por exemplo). O que eu preciso fazer, é pegar a data que está setada na variável inicio (que já vem preenchida), incrementar N dias, e setar esta nova data na variável fim.

Neste trecho de código-exemplo abaixo, ele traz todos os ‘valores’ de Date: “Fri Feb 03 00:00:00 AMT 2012”

Object inicio = ?; // Está como tipo Date, ele já vem com o valor preenchido, através de uma query, e vêm no formato 'yyyy-MM-dd'. 
Object fim = null;
long numeroDias = 10; // Recebe o valor por parâmetro, mas vamos tomar como sendo 10
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();
calendar.setTime((Date)inicio);
calendar.add(Calendar.DAY_OF_MONTH, (int)numeroDias);

String novaData = sdf.format(calendar.getTime());

fim = sdf.parse(novaData);

A pergunta é: como eu faço para realizar a conversão da String novaData para a variável fim (utilizando-a como Date), mantendo apenas a data no formato ‘yyyy-MM-dd’, sem o resto das informações? (Ex. Fri Feb 03 00:00:00 AMT 2012)

Eu preciso que seja desta forma, pois mais pra frente serão realizadas validações em cima destas datas, e como o código é [color=yellow]tosco[/color] antigo e acoplado, não posso fazer de outra maneira, muito menos refazê-lo.

E sim, a variável de numeroDias é inutilmente do tipo long :?

Espero que alguém possa me ajudar com essa dúvida, pois não consegui pensar em nada para deixar como preciso até então.

Agradeço desde já![/quote]

No parse do SimpleDate Format não tem como restringir…

ve se ajuda…

public static void main(String[] args) throws ParseException 
	{	    
		 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		 Object inicio = "2011-01-24"; // Está como tipo Date, ele já vem com o valor preenchido, através de uma query, e vêm no formato 'yyyy-MM-dd'.   
		 Object fim = null;  
		 long numeroDias = 10; // Recebe o valor por parâmetro, mas vamos tomar como sendo 10  
		
		 String dataStr = inicio.toString();
		
		 Date dataInicio = new Date(0);  
		    try {  
		    	dataInicio = sdf.parse(dataStr);  
		    } catch (ParseException e) {  
		        e.printStackTrace();  
		    }  
		  		    
		 Calendar calendar = Calendar.getInstance();  
		 calendar.setTime(dataInicio);  
		 calendar.add(Calendar.DAY_OF_MONTH, (int)numeroDias);  
		  
		 String novaData = sdf.format(calendar.getTime());  		
		 try {
			 fim = sdf.parse(novaData);
			 novaData = sdf.format(fim); 
			 fim = novaData;
		 } catch (ParseException e) {
			 e.printStackTrace();
		 } 
		 		
		 System.out.println("fim ------->> "+fim);
	}

@panthovillas
Pois é, já estou utilizando o SimpleDateFormat…

@programmer_ed
Chegamos praticamente ao mesmo resultado Ed.
O que resultou em seu código foi a variável Object fim recebendo uma String, logo, ela é uma String.

O que eu preciso é um meio de colocar apenas uma data no formato ‘yyyy-MM-dd’ dentro de uma variável do tipo Object, e dizer que aquilo é um Date, sem os dados adicionais (Ex. “Fri Feb 03 00:00:00 AMT 2012”).

Obrigado por responderem!

Um Date não tem formato. O que tem formato é a String representativa da data. E, nesse caso podes definir o formato que queres.

Se precisas mesmo de um Date, não tens, sequer, de te preocupar com o formato. Se o que precisas é de um formato especifico então precisas de uma String.

@pmlm
Obrigado por responder.

Já consegui o que queria… Estou inserindo o resultado dentro do Object e dizendo que é do tipo Date. Assim, posso realizar operações de comparação normalmente. O que eu não tinha levado em consideração (erro estúpido), era que um Date nada mais é do que um Long. Então, o formato realmente não importa, pois as comparações e operações serão realizadas utilizando o Long que representa tal data.

Por exemplo:

// Valores representativos apenas para entendimento, favor não levar compilação em consideração.
Date data1 = Fri Feb 03 00:00:00 AMT 2012;
Date data2 = 03/01/2012;

O valor dos dois Dates é exatamente o mesmo se formos realizar um compareTo(), pois como disse, um Date é construído à partir de um Long.

Dúvida esclarecida, deixarei a resposta para caso alguém precise.