SimpleDateFormat

11 respostas
B

Estou desenvolvendo um banco de horas de motoristas que viajam
de rio preto a sao paulo e vice versa…
E vou pegar os dados de um JTextField que esta em JInternalFrame
quando o usuario der um enter no jtextfield, ai pega os dados
e subtrai a hora e o dia , pq o motorista sai hoje as 20:00 horas e chega a manhã as 05:00 ; ai calcula o total de horas certinho…

So que não consigo fazer isso no meu programa… vou postar o codigo pra alguem me ajudar.

O programa sozinho pra calcular a hora eu consigo fazer
so que jogando dentro do meu programa eu nao consigo,

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

public class TestDate {

/**
  • Retorna a diferença entre duas datas em milisegundos.
  • A ordem das datas não importa.
  • @param d1 Data inicial.
  • @param d2 Data final.
  • @return Tempo, em milisegundos, que passou entre uma data e outra.
    /
    public static long diffDate(Date d1, Date d2) {
    if (d1.before(d2)) {
    return d2.getTime() - d1.getTime();
    }
    else {
    return d1.getTime() - d2.getTime();
    }
    }
    /
    *
  • Transforma o valor passado em milisegundos para a representação no formato
  • @param milis Tempo em milisegundos.
  • @return Tempo convertido.
    /
    public static String milisToString(long milis) {
    int h, m, s;
    Date data;
    /
    Observe que só uma parte da hora será formatada
  • com este SimpleDateFormtat aqui embaixo.
    /
    SimpleDateFormat sdf = new SimpleDateFormat(":mm:ss");
    Calendar calendar = new GregorianCalendar();
    /
    Pega as horas, os minutos e os segundos /
    h = (int) (milis / 3600000);
    m = (int) ((milis / 3600000) / 60000);
    s = (int) ((milis % 3600000) / 1000);
    /
    Seta os campos do objeto Calendar /
    calendar.set(Calendar.HOUR_OF_DAY, h);
    calendar.set(Calendar.MINUTE, m);
    calendar.set(Calendar.SECOND, s);
    /
    Cria uma nova instância de java.util.Date /
    data = new Date(calendar.getTimeInMillis());
    /
    Coloca a hora e junta com o resto. Isto é necessário
  • para caso a diferença seja maior que um dia.
    /
    return “” + h + sdf.format(data);
    }
    public static void main(String[] args) throws Exception {
    /
    Cria um java.text.SimpleDateFormat /
    SimpleDateFormat sdf = new SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”);
    /
    Cria duas datas quaisquer /
    Date date1 = sdf.parse(“02/08/2004 10:52:00”);
    Date date2 = sdf.parse(“03/08/2004 15:30:00”);
    /
    Calcula a diferença de tempo entre as datas /
    long tempoPassado = diffDate(date1, date2);
    /
    Imprime as duas datas /
    System.out.println(sdf.format(date1) + " -> " + date1.getTime());
    System.out.println(sdf.format(date2) + " -> " + date2.getTime());
    /
    Imprime a diferença de tempo */
    System.out.println("A diferença é " + milisToString(tempoPassado));
    }
    }

e jogar isso no meu programa
so que ai eu nao vou dar a data e nem a hora
ela vai puxar dos jtextfields

jLabel1.setVisible(false);

jLabel4.setVisible(false);

jLabel2.setVisible(false);

frame = new JInternalFrame(

Manutenção de Viagens, true, true, true, true);

Container container = frame.getContentPane();

JPanel norte = new JPanel();

frame.pack();

frame.setSize(380,340);

desktopPane.add(frame);

frame.setVisible(true);

frame.setResizable(true);

tnficha.setBorder(BorderFactory.createLoweredBevelBorder());

tnviagem.setBorder(BorderFactory.createLoweredBevelBorder());

tt1.setBorder(BorderFactory.createLoweredBevelBorder());

tpveiculo.setBorder(BorderFactory.createLoweredBevelBorder());

t4.setBorder(BorderFactory.createLoweredBevelBorder());

t5.setBorder(BorderFactory.createLoweredBevelBorder());

norte.add(lnficha); norte.add(tnficha);

norte.add(lnviagem); norte.add(tnviagem);

norte.add(ll1); norte.add(tt1);

norte.add(lpveiculo); norte.add(tpveiculo);

norte.add(l4); norte.add(t4);

norte.add(l5); norte.add(t5);

norte.setBorder(BorderFactory.createLineBorder(Color.black));

norte.setLayout( new GridLayout(6,3,2,2));

container.add(norte, BorderLayout.NORTH);

JPanel centro = new JPanel();

centro.setBorder(BorderFactory.createLineBorder(Color.blue));

centro.setLayout(new GridLayout(5,4,2,2));

t2.setBorder(BorderFactory.createLoweredBevelBorder());

t7.setBorder(BorderFactory.createLoweredBevelBorder());

t3.setBorder(BorderFactory.createLoweredBevelBorder());

t8.setBorder(BorderFactory.createLoweredBevelBorder());

t1.setBorder(BorderFactory.createLoweredBevelBorder());

t6.setBorder(BorderFactory.createLoweredBevelBorder());

centro.add(l2); centro.add(t2);

centro.add(l7); centro.add(t7);

centro.add(l3); centro.add(t3);

centro.add(l8); centro.add(t8);

centro.add(l1); centro.add(t1);

centro.add(l6); centro.add(t6);

t10.setBorder(BorderFactory.createLineBorder(Color.white));

t9.setBorder(BorderFactory.createLineBorder(Color.white));

tcarga.setBorder(BorderFactory.createLineBorder(Color.red));

centro.add(l9); centro.add(l10); centro.add(lcarga);

centro.add(tcarga); centro.add(t9); centro.add(t10);

container.add(centro, BorderLayout.CENTER);

JPanel sul = new JPanel();

sul.add(bveiculo); sul.add(balterar);

sul.add(batualizar); sul.add(bexcluir);

sul.setBorder(BorderFactory.createLineBorder(Color.white));

sul.setLayout( new GridLayout(1,4,10,4));

container.add(sul, BorderLayout.SOUTH);

t6.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent event)

{

[size=24]               É aqui que preciso que calcule a hora aqui ele vai pegar o valor da primeira hora no t1.getText();

e a segunda hora t6.getText(); e vai dar o resultado total das hora no t10.setText();[/size]
}
                  }
                );

		    }

	    }
       );

[color=“red”][/color][size=“18”][/size]

11 Respostas

danieldestro

Quanto você paga a hora??? heheehheheee… :smiley:

B

No momento estou precisando de ajuda
nao de gozação

faz maior cara que estou tentando fazer essa subtração de hora e não consigo colocar no meu programa, merda!

S

Ué mas já está tudo pronto

nesta parte do codigo que entra os getText

/* Cria duas datas quaisquer */
Date date1 = sdf.parse("02/08/2004 10:52:00");
Date date2 = sdf.parse("03/08/2004 15:30:00");

apenas valide a entrada do usuário, ou melhor coloque esta parte do código para lançar uma exception, se uma exception for lançada você alerta o usuário a usar o formato “dd/mm/aaaa hh:mm:ss”.

depois neste código você coloca o setText da 3° JTextField

"A diferença é " + milisToString(tempoPassado)

Acho que não expliquei o que você queria, qualquer coisa reformule melhor sua pergunta para que eu possa entender direito. (desculpe minha ignorância).

B

TestDate

o programa que faz o calculo é a parte que é o TestDate

o programa no qual eu estou usando é MDIApplcation

Aqui quando eu der um enter no JTextField eu quero que ele chame o TestDate e o testdate pega os valor dos JTextFields Do MDIApplication
faz o calculo e Joga no JTextField do MDIApplication

è aqui que eu num consigo fazer

danieldestro

Agora sim você foi mais claro.

Dê uma estudada no tutorial de Swing da Sun. Lá você vai aprender bastante como usar os componentes e os seus listeners, models e renderers.

Neste caso você só precisa dos listeners pro componente.

http://java.sun.com/docs/books/tutorial/uiswing/components/textfield.html
http://java.sun.com/docs/books/tutorial/uiswing/TOC.html#components

é isso aí!

B

ME ajudem

Ou implementar o codigo do TestDate dentro do meu MDIApplication, mais eu ja tentei e não consegui…
Não consigo fazer o calcula das horas

danieldestro

Caramba!

//... seus imports
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class SeuForm extends JFrame implements ActionListener {

  // ... seu codigo
  // bla bla bla
  // ... seu codigo

  public void actionPerformed( ActionEvent e ) {
    if( e.getSource() == seuBotaoDeOK ) {
      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
      Date dtIni = sdf.parse( t1.getText() );
      Date dtFim = sdf.parse( t6.getText() );
      String dif = TestDate.milisToString( TestDate.diffDate( dtIni, dtFim ) );
      t10.setText( dif );
    }
  }
}

Mel na chupeta, heim amigo... E aí, quanto vai pagar a hora?

B

danieldestro

cara deu certo
muito obrigado, tem hora que eu fico meio emcabulado
e nao consigo resolver esses minimos problemas

valew
ops e eu não pago por horas , e sim por Kilometragem…
abraços

danieldestro

Bom, então vamos lá:

SJRP --> SP = 450 KM --> R$ 45,00

Se eu considerar SJRP x Catanduva, tudo bem, você me paga uma Coca-Cola. :stuck_out_tongue:

B

Daqui pra sao paulo eu pago cerca de 400,00 reais caminhão carregado cerca de 13000 kg, se voce passar em cat eu pago uma coca

danieldestro

To em Catanduva… vem pagar uma Coca.

Criado 4 de julho de 2004
Ultima resposta 10 de jul. de 2004
Respostas 11
Participantes 3