Pessoal, estou com o seguinte problema, quando inicio o servidor, armazeno no ServletContext um atributo com o System.currentTimeMillis() que guarda o horario atual de inicialização do container, em uma tela de monitoramento, gostaria de exibir o total de tempo total de execução, então pego a direfença entre o horario que armazenei e o horario que estava no ServletContext:
Date startupTime = (Date) request.getSession().getServletContext().getAttribute("startupTime");
long totalTime = System.currentTimeMillis() - startupTime.getTime();
Como exibir o valor de totalTime no formato:
dd/MM/yyyy HH:mm:ss ?
A diferença entre tempos é um número em milissegundos que é uma duração, não uma data.
Você poderia mostrá-lo no formato “12 dias, 14 horas, 20 minutos e 30 segundos” - nesse ponto basta fazer as contas adequadas.
(Se quiser usar esse valor direto para setar uma variável do tipo java.util.Date, você vai ter uma surpresa desagradável - é que 0 segundos = 1/1/1970 em GMT+00, ou seja, 31/12/1969 21:00:00 em GMT-03 que é o Brasil. Mesmo usando um DateFormat que mostre só horas, minutos e segundos, o problema do TimeZone é que vai lhe mostrar algo com 3 horas de diferença.)
Exemplo:
long t = 1000L * (4 * 3600 + 12 * 60 + 7); // você queria ver “04:12:07”
Date dt = new Date (t); // não deveria fazer isto porque t é uma duração, não uma data
DateFormat df = new SimpleDateFormat (“hh:mm:ss”);
System.out.println (df.format (dt)); // em vez de mostrar “04:12:07” deve mostrar algo como “01:12:07”