operações com datas

8 respostas
almarti

Como somar uma certa data a um certo numero de dias? Lembrando que recebo a data como string, no formato d/m/yyyy

8 Respostas

ramilani12

Utlize a classe Calendar ela resolverá seu problema bem simples:

String aData = data.split("/");

Calendar cal = Calendar.getInstance();

cal.set(Calendar.DAY_OF_MONTH , Integer.parseInt(aData[0]));
cal.set(Calendar.MONTH , Integer.parseInt(aData[1]));
cal.set(Calendar.YEAR , Integer.parseInt(aData[2]));

cal.add(Calendar.DAY_OF_MONTH , qtde de dias que vc quer em int);
N

A String aData tem q ser um array não seria isso…

almarti

Olha a assinatura do meu método:

public static List selectSumData(String Campo, String Tabela, String CampoCondicao, String strId, String Data) throws Throwable, Exception{
		List<Combo> dadosComboList = new ArrayList();

a variavel Data precisa mesmo ser array?

Odyo

Você pode criar um método simples que recebe outra data como entrada e te retorna o número de dias do intervalo …

pode também criar um método chamado dia_seguinte que pode somar a quantidade de dias à data atual … ( é mais chato de fazer pois você teria que levar em consideração vários fatores como nº de dias de cada mes, ano bissexto … essas coisas )

Giulliano

olha almarti…não entendi muito bem as explicações acima…mas entendo que vc usa o método Calendar para receber a data e armazena as mesmas em varíaveis…

Se vc precisa somar o dia…o primeiro passo é pegar a varíavel que contêm o dia e transforma-la em INT…afinal String não soma, só concatena…

exemplificando o q eu disse:

Calendar data = new GregorianCalendar();
int dia = data.get(Calendar.DAY_OF_MONTH);

/**eu usei uma varíavel normal…vc no caso deve ter um array…é só

  • saber qual a posição do número a ser somado
    */

Espero ter esclarecido alguma dúvida…valeu…abraços… :slight_smile:

N

O metodo split devolve um array, na posição zero vai ter o DIA, na um o MÊS e na dois o ano… era isso q tava dizendo então vc adiciona em um array… o primeiro exemplo ta certo só tava faltando isso:

String[] aData =  data.split("/");
almarti

Consegui fazendo a seguinte classe:

import java.util.*;
import java.text.*;

public class OpDatas{
public static String Add(String dt, String tp, int qt, String sFormat) throws ParseException {

  
  Date tstHoje = new SimpleDateFormat(sFormat).parse(dt);
   GregorianCalendar addDate = new GregorianCalendar();
  addDate.setTime(tstHoje);

if (tp.equals("W") || tp.equals("w")) {// Adiciona "n"semanasa
  addDate.add(Calendar.WEEK_OF_MONTH, qt);
  } else if (tp.equals("D") || tp.equals("d")) {//Adiciona "n" dias
  addDate.add(Calendar.DAY_OF_MONTH, qt);
  } else if (tp.equals("M") || tp.equals("m")) {//Adiciona "n" meses
  addDate.add(Calendar.MONTH, qt);
  } else if (tp.equals("Y") || tp.equals("y")) {//Adiciona "n" anos.  
  addDate.add(Calendar.YEAR, qt);
}


//Pega uma instancia de DateFormat. A classe DateFormat encarrega-se
//de utilizar o "Locale" adequado
  Date d = addDate.getTime();
  DateFormat df = DateFormat.getDateInstance();

//Formata a String adequadamente
  String s = df.format(d);

return s;

}

}

Valeu galera.

ramilani12
*Nino*:
O metodo split devolve um array, na posição zero vai ter o DIA, na um o MÊS e na dois o ano... era isso q tava dizendo então vc adiciona em um array... o primeiro exemplo ta certo só tava faltando isso:
String[] aData =  data.split("/");

Obrigado Nino é isso mesmo , falta de atenção!

Criado 2 de fevereiro de 2007
Ultima resposta 2 de fev. de 2007
Respostas 8
Participantes 5