Gostaria de saber uma coisa.
Eu sei que um milissegundo (1000) equivale a 1 segundo.
Daí eu montei o código abaixo:
Date date = new Date();
date.setTime(1000);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
//esta linha deveria mostrar-me como resultado: "00:00:01"
System.out.println("Resultado: "+sdf.format(date));
O pedaço de código deveria exibir o seguinte resultado: “00:00:01”
Porém, tudo o que ele mostra é: “21:00:01”
Resumindo, ele mostra o meu um segundo, mas ele mostra a hora junto, sendo que eu não setei hora.
Eu tentei o seguinte também:
Time time = new Time(1000);
System.out.println(time);
Mas ele mostrou a mesma coisa, mas creio por que seja filho de Date.
Se eu quisesse mostrar só 00:00:01 como resultado, o que eu deveria fazer?
Gostaria de saber como fazer isso sem usar o JodaTime. Vlw.
Se você imprimir o resto de java.util.Date que você setou desse jeito, vai ver que a data também é estranha:
31 de dezembro de 1969, às 21:00:01, time zone = Brasil/São Paulo.
Ou seja, você só teria o resultado esperado se mandasse imprimir o java.util.Date usando um timezone UTC (porque Brasil/São Paulo é UTC - 03:00:00 fora do horário de verão).
Ou seja, você precisa usar o Joda-Time para o que você quer fazer.
Viu entanglement, é verdade o que você falou, dessa forma que eu fiz ele coloca uma data estranha. É que no meu caso essa parte da data( dia, mês e ano) eu não vou
usar, porque só preciso do cálculo de horas mesmo. Mas é engraçado. Isso pode ser considerado um Bug do Java? Pois quando eu tenho um outro valor qualquer em milissegundos,
quando digo completo refiro-me a meu valor em milissegundos com os campos hora, minuto e segundo preenchidos, o java mostra a hora corretamente. Porém, quando o valor
em milissegundos não possui a informação de hora, o que acontece é que o cálculo acaba saindo estranho.
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 1);
Date dat = new Date(cal.getTimeInMillis());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
System.out.println("Resultado: "+ sdf.format(dat));
Fala alexfmjr, tudo beleza?
Assim funciona. O problema é que eu não posso travar a hora em meu programa. Ele vai receber o tempo em milissegundos e converter.
Esse tempo pode ter um segundo, um minuto ou várias horas. O negócio é usar o JodaTime e não reinventar a roda. Como o próprio
autor do JodaTime diz:
O negócio é importar o jarzinho do Joda e ser feliz, rsrsrs
Abraço a todos.
Não, isso não é um bug do Java. Isso é porque você está tentando usar o java.util.Date, que representa instantes no tempo (por exemplo, a sua data de nascimento) para representar períodos de tempo, e o java.util.Date não é apropriado para esse tipo de coisas.
Só para comparar, o C# (.NET) tem duas classes diferentes - o System.DateTime e o System.TimeSpan (esse sim representa intervalos de tempo).
Period p = new Period(1000);
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR, p.getHours());
c.set(Calendar.MINUTE, p.getMinutes());
c.set(Calendar.SECOND, p.getSeconds());
Time t = new Time(c.getTimeInMillis());
System.out.println("TEMPO: "+t);
Esta correto o que o Bruno Laturner respondeu, a unica diferença é que depois do date.setTime(1000) a data que fica é:
31/12/1969 21:00:01 (GMT-3)[/quote]
[quote=oddy.silva]Usando o JodaTime e sendo feliz:
Period p = new Period(1000);
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR, p.getHours());
c.set(Calendar.MINUTE, p.getMinutes());
c.set(Calendar.SECOND, p.getSeconds());
Time t = new Time(c.getTimeInMillis());
System.out.println("TEMPO: "+t);
Assim funciona!!!
Vlw!
[/quote]
Com JodaTime, sendo feliz de verdade:
Time t = new Time(new DateTime().plus(1000).getMillis());
ou
Time t = new Time(new DateTime().plusSeconds(1).getMillis());
Eu vi aqui, no meu caso isso não se aplica, pois soma 1 segundo ao tempo atual.
No meu caso, tenho um longo e preciso transformá-lo em hora (HH:mm:ss), contando
a partir do nada. O meu código anterior ainda sofre variações de acordo com a hora do
dia, mas já é um avanço!!!