Thread - COntador Regressivo

Galera estou precisando desenvolver um contador regressivo utilizando Threads

Eu vou passar uma Data (String) e ele vai pegar a data do sistema e começar a contar quantos dias, horas, minutos e segundos faltam para aquela data.

Preciso de uma luz…

qual sua duvida? criar a thread ou calcular as datas?

Dá uma olhada nesse post:
http://www.guj.com.br/posts/list/52964.java#279083

E nos dois depois dele… são 3 exemplos do que você quer, um utilizando javax.swing.Timer, outro utilizando java.util.Timer e outro utilizando Threads. Acho que para vc, a primeira opção é a melhor.

Depois só adapte o exemplo para o contador se regressivo, ao invés de progressivo.

Calcular as datas…

Tipo peguei a String com a data que o cara quer

como irei calcular a diferença entre esta e a atual e jogar isto no Label de minha interface?

Você está usando a péssima classe Calendar ou o ótimo JODA-Time?

Se estiver usando o Calendar, sempre dá para pegar o tempo em milisegundos e calcular.

Nem sei cara

Java.util.Date

nada mais

pode usar esses metodos

	public static String getDifDate(Date date1, Date date2) {

		return getDifDate(date1, date2, "dd/MM/yyyy HH:mm:ss");

	}

	public static String getDifDate(Date date1, Date date2, String format) {
		GregorianCalendar gc1 = new GregorianCalendar();
		gc1.setTime(date1);
		GregorianCalendar gc2 = new GregorianCalendar();
		gc2.setTime(date2);
		GregorianCalendar gc3 = new GregorianCalendar();

		gc3.set(gc1.get(Calendar.YEAR), gc1.get(Calendar.MONTH), gc1.get(Calendar.DAY_OF_MONTH), gc2.get(Calendar.HOUR)
				- gc1.get(Calendar.HOUR), gc2.get(Calendar.MINUTE) - gc1.get(Calendar.MINUTE), gc2.get(Calendar.SECOND)
				- gc1.get(Calendar.SECOND));

		return new java.text.SimpleDateFormat(format).format(gc3.getTime());
	}

esse aqui para criar um Date a partir da String

	/**
	 * Retorna um java.util.Date a partir de um texto/data local do SO, no
	 * formato dd/MM/yyyy. Se houver algum erro, retorna null
	 */
	public static java.util.Date convertDate(String date) {
		DateFormat format = DateFormat.getDateInstance();
		format.setLenient(false);

		try {
			return new java.util.Date(format.parse(date).getTime());
		} catch (Exception e) {
			return null;
		}
	}

Fica assim:

[code]long futuro = dataFutura.getTime();
long presente = new Date().getTime();

long diferenca = futuro - presente; //Esse tempo está em milisegundos.
diferenca /= 1000; //Agora em segundos.

//Extrai os segundos
int segundos = diferenca % 60;
diferenca /= 60;

//Extrai os minutos
int minutos = diferenca % 60;
diferenca /= 60;

//Sobrou as horas
int horas = (int) diferenca;

lblTempo.setText(String.format("%02d:%02d:%02d", horas, minutos, segundos));[/code]

Talvez estejam faltando alguns casts, eu não testei o código. Mas a lógica é essa.