Manipulação de hora

Olá pessoal! :stuck_out_tongue:

Estou tendo um probleminha com a lógica para se converter milissegundos em hora, minuto e segundo.
Sei que dá para pegar a hora bonitinha do sistema mas como preciso contar o tempo de um certo período que pode ser mais de um dia, então tive que usar aquele negócinho de pegar a Qtde de milissegundo desde 1970.
Vou colocar o código fonte para vocês analizarem, o código pode parecer um pouco grande mas é por causa da janelinha, a lógica mesmo está no metódo que se chama conversao.

[code]import java.awt.;
import java.awt.event.
;
import java.io.IOException;

import javax.swing.;
import javax.swing.event.
;

public class teste extends JPanel {
private JTextField tfMilissegundos;
private JButton btCalcular;

public teste() {
    //construct components
    tfMilissegundos = new JTextField (5);
    btCalcular = new JButton ("Calcular");

    //adjust size and set layout
    setPreferredSize (new Dimension (220, 88));
    setLayout (null);

    //add components
    add (tfMilissegundos);
    add (btCalcular);

    //set component bounds (only needed by Absolute Positioning)
    tfMilissegundos.setBounds (15, 15, 190, 25);
    btCalcular.setBounds (60, 45, 100, 25);
    
    btCalcular.addActionListener(new ActionListener()
	{
		public void actionPerformed(ActionEvent e)
		{
			conversao();				
		}
	});
    tfMilissegundos.addActionListener(new ActionListener()
	{
		public void actionPerformed(ActionEvent e)
		{
			conversao();				
		}
	});
}


public void conversao()
{
	int s,m,h;
	long ms,tempoMilissegundos = Long.parseLong(tfMilissegundos.getText());
	String tempoPronto;
	
	
	s = (int)tempoMilissegundos/1000;
	ms = (int)(tempoMilissegundos/1000-s);
	m = (int) s/60;
	s = (int)(s/60-m);
	h = (int)m/60;
	m = (int)m/60-h;
	System.out.println(h+"\n"+m+"\n"+s+"\n"+ms+"\nTempo total (ms): "+tempoMilissegundos);
	
	tempoPronto = String.valueOf(h)+"  :  "+String.valueOf(m).substring(1)+"  :  "+String.valueOf(s).substring(1);
	
	JOptionPane.showMessageDialog(null,"           Hora     Minutos   Segundos\nTempo: "+tempoPronto);
}


public static void main (String[] args) {
    JFrame frame = new JFrame ("Milissegundos");
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add (new teste());
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setVisible (true);
}

}
[/code]

OBS: 1 minuto == 3600000 milissegundos
Gustavo…
Valeu gente! :thumbup:

Se entendi bem, tente isso:

public String converte(long ms) {
		int s, m, h;
		String tempoPronto = "";

		s = (int)ms / 1000;
		ms -= s * 1000;
		m = s / 60;
		s -= m * 60;
		h = m / 60;
		m -= h * 60;

		tempoPronto += (h < 10) ? "0" + h : h;
		tempoPronto += (m < 10) ? ":0" + m : ":" +  m;
		tempoPronto += (s < 10) ? ":0" + s : ":" + s;
		tempoPronto += (ms < 10) ? ".00" + ms : (ms < 100) ? ".0" + ms : "." +  ms;
		
		return tempoPronto;
	}

Retorna uma String formatada como:

HH:MM:SS.mmm

H - horas
M - minutos
S - segundos
m - milissegundos.

Que tal…

[code] public void conversao()
{
double sec, min, hora;
long ms = Long.parseLong(tfMilissegundos.getText().trim());

	sec = ms / 1000.0; // equivalente em millisegundos
	min = sec / 60.0; // equivalente em segundos
	hora = min / 60.0; // equivalente em horas
	
	System.out.println(ms + " millisegundos equivalem a " + sec + " segundo(s)," +
				" ou " + min + " minuto(s), ou " + hora + " hora(s)");
	
	double intHora, intMin, intSec, intMs;
	intHora = (int) hora; // horas inteiras
	hora = hora - intHora; // resto, em horas
	intMin = (int) (hora * 60); // minutos inteiros
	hora = hora - (intMin / 60); // resto, em horas
	intSec = (int) (hora * 60 * 60); // segundos inteiros
	hora = hora - (intSec / 60 / 60); // resto, em horas
	intMs = (int) (hora * 60 * 60 * 1000);
	
	System.out.println(ms + " millisegundos equivalem a " + intHora + " hora(s), "
			+ intMin + " minuto(s), " + intSec + " segundo(s) e " + intMs
			+ " millisegundo(s)");
	
}

[/code]

Valeu Gente…

Obrigado por todos que ajudaram…com a ajuda de vocês, consegui!

:thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: :thumbup:

[quote=MarceloS]Que tal…

[code] public void conversao()
{
double sec, min, hora;
long ms = Long.parseLong(tfMilissegundos.getText().trim());

            .
            .

[/code]
[/quote]

Para que serve esse trim() pq sem ou com ele a aplicação funcionou redondinho e eu nunca tinha visto esse método. O que faz?

O String#trim() tira os espaços do início e final do texto… só por precaução :slight_smile: