Dúvida com método setTime(Long timeInMillis) [ RESOLVIDO ]
13 respostas
oddy.silva
Gostaria de saber uma coisa.
Eu sei que um milissegundo (1000) equivale a 1 segundo.
Daí eu montei o código abaixo:
Datedate=newDate();date.setTime(1000);SimpleDateFormatsdf=newSimpleDateFormat("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:
Timetime=newTime(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.
oddy.silva
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.
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.
B
Bruno_Laturner
Favor olhar a documentação do Java para saber o que um método faz ou deixa de fazer:
Em português, o long que você passa é o número de milisegundos desde 1º de Janeiro de 1970, no horário do meridiano de greenwich.
A data que você viu então vai ficar 01/01/1970 21:00:01, horário de Brasília (GMT -3)
E
entanglement
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).
Subtrair 2 DateTimes resulta em um TimeSpan.
A
alexfmjr
“Correção idiota”,
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)
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!!!
B
Bruno_Laturner
Não entendi esse “long contando a partir do nada”. São milisegundos a partir de uma data específica, ou a contagem que o Java usa a partir do zero?
oddy.silva
rsrsrsrs, verdade, a partir do nada só o Chuck Norris