Erro no SimpleDateFormat

8 respostas
L

Olá pessoal!

Estou com problemas de formatação de data com o SimpleDateFormat.
Meu código é este:

dateFormat = new SimpleDateFormat(" hh 'h' mm 'm' ss 's' SSS 'ms'"); long x = endTime - initTime; System.out.println(x); System.out.println(dateFormat.format(x));

No primeiro sysout o programa printa na tela o valor 24375.
No segundo sysout o programa printa na tela o valor 09 h 00m 24s 375sss

Alguem sabe porque ele printa estas 09h e não 00h?!

8 Respostas

R

EDIT: Ignorem a minha pergunta … viajei.

Gobain

Nossa, interessante esse problema mesmo…
Se vc dividir o 24375 q entra como valor do x por (1000 * 60 * 60) q é uma hora o retorno é zero… :?:
Alguém mais entendido aí sabe responder essa?

WashingtonBotelho

Fiz o teste aqui e imprimiu ‘09 h 00 m 24 s 375 ms’:

SimpleDateFormat dateFormat = new SimpleDateFormat(" hh 'h' mm 'm' ss 's' SSS 'ms'"); long x = 24375; System.out.println(x); System.out.println(dateFormat.format(x));

Costumo usar o SimpleDateFormat assim:

SimpleDateFormat formatoHora = new SimpleDateFormat("HH:mm:ss");
L

O endTime e o initTime são duas variaveis do tipo long.

eu tentei formatar a hora com :, mas o problema continua…

T

SimpleDateFormat não é adequado para imprimir diferenças entre datas.

Ele serve para imprimir datas.

Portanto, esse valor (24375 ms) foi considerado como “dia 01/janeiro/1970 + 24,375 s, no fuso horário UTC (GMT).” Como o Brasil é atrasado em relação à Inglaterra de 3 horas, então esse valor, impresso, daria 31/dezembro/1969, 21:00:24 + 0,375 segundos.

Você usou “hh”, então vai imprimir 09 horas (9 da noite). Se você tivesse usado “HH” (que é o jeito correto de imprimir horas de 00 a 23), então você teria percebido que iria aparecer “21 horas etc.”.

L

Então como eu devo fazer para imprimir a diferença de hora de forma correta?!

T

Não é por nada não, mas eu faria contas - é mais fácil.

No seu caso, veja se isto está funcionando.

public static String imprimeDiferenca (Date inicio, Date fim) {
    long t = fim.getTime() - inicio.getTime();
    long h, m, s, ms;
    h = t / (60 * 60 * 1000); 
    t = t % (60 * 60 * 1000);
    m = t / (60 * 1000);
    t = t % (60 * 1000);
    s = t / 1000;
    ms = t % 1000;
    return String.format ("%02d h %02d m %02d s %03d ms", 
        h, m, s, ms);
}
L

Deu certo!!!
Obrigada pessoal!!!

Criado 11 de junho de 2008
Ultima resposta 11 de jun. de 2008
Respostas 8
Participantes 5