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

6 respostas
R

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á!

6 Respostas

panthovillas

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.

diego.sas

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á!

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

programmer_ed

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);
	}
R

@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!

pmlm

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.

R

@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.

Criado 24 de janeiro de 2012
Ultima resposta 24 de jan. de 2012
Respostas 6
Participantes 5