Manipulação de hora

6 respostas
gqferreira

Olá pessoal! :P

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.
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);
    }
}

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

6 Respostas

M

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;
	}
M

Retorna uma String formatada como:

HH:MM:SS.mmm

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

Marcelo_FS

Que tal...

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)");
		
    }
gqferreira

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:

gqferreira
MarceloS:
Que tal...
public void conversao()
    {
    	double sec, min, hora;
		long ms = Long.parseLong(tfMilissegundos.getText().trim());
		
                .
                .

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?

Marcelo_FS

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

Criado 16 de dezembro de 2008
Ultima resposta 16 de dez. de 2008
Respostas 6
Participantes 3