Calcular/Somar Datas - RESOLVIDO

6 respostas
P

Ola Pessoal!
estou fazendo um calculo com data mas esta acontecendo o seguinte:

GregorianCalendar vencimento = new GregorianCalendar();
int inteiro;
vencimento.add(Calendar.DAY_OF_MONTH, 10);
System.out.print(vencimento.getTime());

da certinho, faz o cálculo, soma dez dias à data, armazenada em vencimento e imprime corretamente.
porém qdo uso assim:

GregorianCalendar vencimento = new GregorianCalendar();
int inteiro = 10;
vencimento.add(Calendar.DAY_OF_MONTH, inteiro);
System.out.print(vencimento.getTime());

imprime sempre a data atual (data do dia).
O que pode estar acontecendo?

6 Respostas

marcosvidolin

Olá pcjardim…

Tem certesa que imprime a data atual? posta o seu codigo completo, pois talvez vc esteja se confundindo e alterando a data do objeto.
O código que voce postou é o mesmo.

Att

P
O erro a acontece qdo eu mudo de
vencimento.add(Calendar.DAY_OF_MONTH, 10);
para
vencimento.add(Calendar.DAY_OF_MONTH, inteiro);
. Mas o código completo é:
package relatorios;

import bd.*;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.SQLException;
import javax.swing.*;
import java.awt.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.table.*;

public class RelPrazos extends JFrame{
    private Date data1, data2;
    
    GregorianCalendar data;
    GregorianCalendar vencimento = new GregorianCalendar();
    String nome, medida;
    GregorianCalendar hoje = new GregorianCalendar();
    GregorianCalendar c = new GregorianCalendar();    
    SimpleDateFormat formatadorBr = new SimpleDateFormat("dd/MM/yyyy");
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
    


  public RelPrazos(MysqlQuery q) throws InstantiationException, ClassNotFoundException, IllegalAccessException, SQLException{
    super("Relatóriorio de Prazos");
    final DefaultTableModel modelo = new DefaultTableModel();
    JTable tabelaP = new JTable(modelo);
    JTableHeader titulos = tabelaP.getTableHeader();
    titulos.setBackground(Color.LIGHT_GRAY);    
    MysqlQuery q1 = q;

    // Cria duas colunas
    String nom = "Nome";
    String meD = "Medida";
    String dtI = "Data Internação";
    String ven = "Vencimento";
    modelo.addColumn(nom);
    modelo.addColumn(meD);
    modelo.addColumn(dtI);
    modelo.addColumn(ven);

    Font font = tabelaP.getFont().deriveFont(Font.BOLD);
    tabelaP.getColumn(ven).setCellRenderer(new FontRenderer(font));
    tabelaP.getColumn(dtI).setCellRenderer(new FontRenderer(font));
    tabelaP.getColumnModel().getColumn(0).setPreferredWidth(370);
    tabelaP.getColumnModel().getColumn(1).setPreferredWidth(260);
    tabelaP.getColumnModel().getColumn(2).setPreferredWidth(140);
    tabelaP.getColumnModel().getColumn(3).setPreferredWidth(140);


      data1 = hoje.getTime();      
      q.open("select * from processos");
      q.last();      
      do{
          String non = q.fieldbyname("codP");
          String med = q.fieldbyname("codM");
          String datInt = q.fieldbyname("dataInt");
          String d1 = datInt;
          String d = d1.substring(8, 10);
          int dia = Integer.parseInt(d);
          String m = d1.substring(5, 7);
          int mes = Integer.parseInt(m);
          String a = d1.substring(0, 4);
          int ano = Integer.parseInt(a);
          data = new GregorianCalendar(ano, (mes - 1), dia); //20/09/2007

          data2 = data.getTime();
          double diffDias = Math.floor((data1.getTime() - data2.getTime()) / 1000.0 / 86400.00);
          double val = diffDias;          

          int inteiro = (int) (val);          
          String inteiroS = Integer.toString(inteiro);

          if (inteiroS.length() > 3);
          {
              inteiroS = Insere(inteiroS);
          }
          double resto = (val - inteiro);
          
          String cond = (inteiroS + " dias de condenção (" + calculaData(data1, data2) + ")");
          vencimento = data;
          System.out.print(vencimento.getTime());
          
          vencimento.add(Calendar.DAY_OF_MONTH, inteiro);
          System.out.println(" <=> " + vencimento.getTime() + " <=> " + inteiro);

          datInt = formataData(datInt);
          Class.forName("com.mysql.jdbc.Driver").newInstance();
          Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/infancia?user=root&password=");
          Statement stmt = (Statement) conn.createStatement();
          String query = "select * from pessoas where codigo = '" + non + "'";
          ResultSet rs = stmt.executeQuery(query);
          while (rs.next()) {
              nome = rs.getString("nome");
          }
          String query1 = "select * from medidas where codigo = '" + med + "'";
          ResultSet rs1 = stmt.executeQuery(query1);
          while (rs1.next()) {
              medida = rs1.getString("medida");
          }

          
          
          modelo.addRow(
                  new Object[]{
                    nome,
                    medida,
                    datInt,
                    formatadorBr.format(data.getTime())
                  }
          );
      }while (q.prev());

    tabelaP.setPreferredScrollableViewportSize(new Dimension(700, 450));

    Container d = getContentPane();
    d.setLayout(new FlowLayout());

    JScrollPane scrollPane = new JScrollPane(tabelaP);
    d.add(scrollPane);

    setSize(730, 520);
    setVisible(true);
  }
}
P

Alguém poderia me ajudar nisto?
obg!

L

tente assim,setando a data no calendar primeiro

GregorianCalendar vencimento = new GregorianCalendar(); 
		 vencimento.setTime(new Date());
		 int inteiro = 16; 
		 vencimento.add(Calendar.DAY_OF_MONTH, inteiro);  		
		 System.out.print(vencimento.getTime());
P

meu amigo se eu fizer assim:

int inteiro = 10;

da certo, porém eu preciso receber o resultado de um cálculo q é este:

double diffDias = Math.floor((data1.getTime() - data2.getTime()) / 1000.0 / 86400.00);
double val = diffDias;
int inteiro = (int) val;

Quando chega nesse linha:

vencimento.add(Calendar.DAY_OF_MONTH, inteiro);

no primeiro caso “inteiro = 10” da certinho, mas da forma que eu preciso ao invés de calcular, somar os dias(inteiro) a data que está em vencimento, vencimento fica com a data atual (do dia)

P

fiz questão de testar assim:

int inteiro = 20; 
vencimento.add(Calendar.DAY_OF_MONTH, inteiro);

fez o cálculo corretamente, porém assim:

GregorianCalendar hoje = new GregorianCalendar(); 
GregorianCalendar data = new GregorianCalendar(); 
int dia = 03; 
mes=05; 
ano=2010; 
data1 = hoje.getTime(); 
data = new GregorianCalendar(ano, (mes - 1), dia); 
data2 = data.getTime(); 
double diffDias = Math.floor((data1.getTime() - data2.getTime()) / 1000.0 / 86400.00); 
int inteiro = (int) diffDias; 
vencimento.add(Calendar.DAY_OF_MONTH, inteiro);

imprimiu a data atual ou seja a data do dia.

Criado 7 de maio de 2010
Ultima resposta 13 de mai. de 2010
Respostas 6
Participantes 3