Olá pessoal, por favor estou precisando de uma força para fazer um contador regressivo de uma data fixa, começando da data atual.
Preciso de um contador de segundos, minutos, horas e dias, mas o total
ex: dias=1430
horas=34325
minutos=2059500
segundos=123570054
e eu só estou conseguindo assim: 335:05:04:54
Agradeço desde já!!!
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.text.ParseException;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyFrame extends JFrame {
// Local onde atualizaremos a hora
private JLabel lblHora;
// Formatador da hora
private static final DateFormat FORMATO = new SimpleDateFormat("HH:mm:ss");
public MyFrame() {
// Construímos nosso frame
super("Exemplo");
setLayout(new FlowLayout());
getContentPane().add(getLblHora());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 75);
setVisible(true);
// Iniciamos a thread do relógio. Tornei uma deamon thread para que seja
// automaticamente finalizada caso a aplicação feche.
Thread clockThread = new Thread(new ClockRunnable(), "Clock thread");
clockThread.setDaemon(true);
clockThread.start();
}
private JLabel getLblHora() {
if (lblHora == null) {
lblHora = new JLabel();
}
return lblHora;
}
/**
* Método para atualizar a hora no formulário. Não é thread-safe, portanto,
* se o utilizado fora da thread da AWT, deve-se utilizar um dos comandos da
* EventQueue (invokeLater ou invokeAndWait).
*/
public void setHora(Date date) {
// getLblHora().setText(FORMATO.format(date));
String T2= "07/06/2014";
GregorianCalendar calendar = new GregorianCalendar();
date = calendar.getTime();
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
formatador.format(date);
Date d2 = new Date();
try{
d2 = formatador.parse(T2); }
catch(ParseException pe) {}
long dias = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(dias));
long horas = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(horas));
long min = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(min));
long seg = (d2.getTime()-date.getTime());
getLblHora().setText(FORMATO.format(seg));
}
/**
* Runnable que contém o código que atuará na nossa thread. Basicamente, ele
* chama o método setHora de segundo em segundo, passando a data atual.
*/
private class ClockRunnable implements Runnable {
public void run() {
try {
while (true) {
// Aqui chamamos o setHora através da EventQueue da AWT.
// Conforme dito, isso garante Thread safety para o Swing.
EventQueue.invokeLater(new Runnable() {
public void run() {
// Só podemos chamar setHora diretamente dessa
// forma, pois esse Runnable é uma InnerClass não
// estática.
setHora(new Date());
}
});
// Fazemos nossa thread dormir por um segundo, liberando o
// processador para outras threads processarem.
Thread.sleep(1000);
}
}
catch (InterruptedException e) {
}
}
}
public static void main(String args[]) {
new MyFrame();
}
}