Tenho duas strings de data e preciso subtrair (string1 - string2)

7 respostas
D

Grupo,

Meu problema vou montar o exemplo

String 2 = “02092005”; //02/09/2005
String 1 = “30082005”; //30/08/2005

E Preciso subtrair 02/09/2005 - 30/08/2005 que o resultado é 3.

Não sei que matématica vou usar tentei transformar para long e fazer uma subtração, mas com datas é embaçado o resultado não bate porque um mês tem 30 outro tem 31, e gostaria de saber se existe alguma classe Date que faça isso e por favor sou muito leigo me mande um exemplo que souber.

Obrigado

7 Respostas

P

Ola

Para “converter” a String em Date/calendar, voce pode suar a classe SimpleDateFormat.

Depois, com as duas datas, pegue o timestamp delas (getTime do Date) e substraia os longs, divida isso pelo numero de milissegundos em um dia e esta pronto (246060*1000)

No forum do guj, usando a pesquisa, voce vai encontrar exemplos de codigo ja prontos para isso

paulo

M

de uma olhada aqui…

http://www.guj.com.br/posts/list/9440.java

D

Conhegui, galera valeu pela ajuda.
Segue abaixo como eu fiz, fiz em
Fiz assim

<%!
public static int dataDiff(java.util.Date dataLow, java.util.Date dataHigh){

GregorianCalendar startTime = new GregorianCalendar();
     GregorianCalendar endTime = new GregorianCalendar();

     GregorianCalendar curTime = new GregorianCalendar();
     GregorianCalendar baseTime = new GregorianCalendar();

     startTime.setTime(dataLow);
     endTime.setTime(dataHigh);

     int dif_multiplier = 1;

     // Verifica a ordem de inicio das datas
     if( dataLow.compareTo( dataHigh ) &lt; 0 ){
         baseTime.setTime(dataHigh);
         curTime.setTime(dataLow);
         dif_multiplier = 1;
     }else{
         baseTime.setTime(dataLow);
         curTime.setTime(dataHigh);
         dif_multiplier = -1;
     }

     int result_years = 0;
     int result_months = 0;
     int result_days = 0;

     // Para cada mes e ano, vai de mes em mes pegar o ultimo dia para import acumulando
     // no total de dias. Ja leva em consideracao ano bissesto
     while( curTime.get(GregorianCalendar.YEAR) &lt; baseTime.get(GregorianCalendar.YEAR) ||
            curTime.get(GregorianCalendar.MONTH) &lt; baseTime.get(GregorianCalendar.MONTH)  )
     {

         int max_day = curTime.getActualMaximum( GregorianCalendar.DAY_OF_MONTH );
         result_months += max_day;
         curTime.add(GregorianCalendar.MONTH, 1);

     }

     // Marca que é um saldo negativo ou positivo
     result_months = result_months*dif_multiplier;


     // Retirna a diferenca de dias do total dos meses
     result_days += (endTime.get(GregorianCalendar.DAY_OF_MONTH) - startTime.get(GregorianCalendar.DAY_OF_MONTH));

     return result_years+result_months+result_days;
 }
%>

<%

Calendar c = Calendar.getInstance();

String dia, mes, ano, data_hoje  = “”;

int diasem;
dia = Integer.toString(c.get(Calendar.DATE));

mes = Integer.toString((c.get(Calendar.MONTH)+1));

ano = Integer.toString(c.get(Calendar.YEAR));

diasem = c.get(Calendar.DAY_OF_WEEK);

if (Integer.parseInt(dia) < 10)
dia = “0”+dia;

if (Integer.parseInt(mes) < 10)
mes = “0”+mes;

data_hoje = dia+"/"+mes+"/"+ano;
String datateste = mes+"/"+dia+"/"+ano;

java.text.DateFormat df;

df = new SimpleDateFormat(dd/MM/yyyy);

df.setLenient(false);

java.util.Date data_hoje1 = df.parse (data_hoje);

data = resultset.getString(“DATA”); //DD/MM/YYYY

java.text.DateFormat df1;

df1 = new SimpleDateFormat(dd/MM/yyyy);

df1.setLenient(false);

java.util.Date data1 = df1.parse(data);

out.print("<br><br><br>");

out.print(data hoje:+ data_hoje1);

out.print("<br>");

out.print(data consulta:+ data1);

out.print("<br><br><br>");
int diaaaa = dataDiff(data_hoje1,data1);

out.print(diaaaa);

out.print("<br><br><br>");

%>
S

nossa, esse seu codigo me deixou realmente assustado…

P

daniel, isole esse codigo.

com jstl voce vai poder criar uma function, e seu codigo se reduiziria a isso:

${minhasFuncoes:pegaDiferencaDeDias(cal1, cal2}

e o código java iria para o devido lugar: um .java

D

É sou iniciante, meus códigos não são tão inchutos, mas depois de pronto procuro criar classes e depois utilizar javaben para estanciar as classes via jsp.

D

Paulo,

Estou muito atrasado pois jstl, só conheço como funciona, mas na prática não parei para estudar e aprender, se puder me indicar alguma coisa.

Criado 24 de agosto de 2005
Ultima resposta 24 de ago. de 2005
Respostas 7
Participantes 4