Operação com horas[HH:mm:ssSSS] [RESOLVIDO]

6 respostas
D

Boa tarde pessoal!
Estou quebrando a cabeça para fazer uma operação com horas e ainda não sei ao certo o que fazer.

Tenho um tempo inicial e um final no formado yyyyMMddHHmmssSSS.
Preciso obter a diferença entre esse tempo e exibir no mesmo formato.

Por exemplo:
Inicial - 20111120204635000 (Sun Nov 20 20:46:35 BRST 2011)
Final - 20111120204709144 (Sun Nov 20 20:47:09 BRST 2011)

Fazendo o seguinte código

SimpleDateFormat startDateSF = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    		 SimpleDateFormat endDateSF = new SimpleDateFormat("yyyyMMddHHmmssSSS");
    		 SimpleDateFormat returnDateSF = new SimpleDateFormat("HHmmssSSS");

    		
        	Date start = new Date(startDateSF.parse("20111120204635000").getTime());
        	Date end = new Date(endDateSF.parse("20111120204709144 ").getTime());
        	
        	long millisec = end.getTime() - start.getTime();
        	Date returnDate = new Date(millisec);
        	return returnDateSF.format(returnDate);

O retorno fica - Wed Dec 31 21:00:34 BRT 1969 ou formatado em HHmmssSSS - 210034144
Pq apresenta 21 hs?
Tem algum jeito de eu apresentar somente essa diferença? Ex.: 00:00:34144

Obrigado

6 Respostas

jaboot

danilão,

Se você puder utilizar o joda-time, esse cálculo fica ridículo.

D

Valeu pela resposta!
Bom, não sei se posso utilizar, verei amanhã.
Mas alguém sabe se haveria algum modo sem o Joda_time?

Obrigado!

M

danilocsf, Veja se isso te ajuda

long difMilli = dataFinal.getTimeInMillis() - dataInicio.getTimeInMillis();
      int timeInSeconds = (int)difMilli / 1000;  
      int hours, minutes, seconds;  
      hours = timeInSeconds / 3600;  
      timeInSeconds = timeInSeconds - (hours * 3600);  
      minutes = timeInSeconds / 60;  
      timeInSeconds = timeInSeconds - (minutes * 60);  
      seconds = timeInSeconds;  
      System.out.println(hours + " hour(s) " + minutes + " minute(s) " + seconds + " second(s)");

Boa sorte

D

Murilo, a questão é que o final não é apenas segundos (ss) o final é ssSSS.
Valeu!

UP.COM
Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day (0-23) Number 0 k Hour in day (1-24) Number 24 K Hour in am/pm (0-11) Number 0 h Hour in am/pm (1-12) Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zone -0800

---------------------------------------------------------------------------------------------

public class Program
{
    public static void main(String[] args)
    {
        // Create a SimpleDateFormat object.
        String pattern = "dd-MMM-yyyy HH:mm:ss.SSS";
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(pattern);

        // Parse a sample date starting at position 0.
        String sampleDateStr = "04-Jul-1776 22:00:00.000";
        ParsePosition pos = new ParsePosition(0);
        Date sampleDate = sdf.parse(sampleDateStr, pos);

        // Print out the date using the supplied pattern.
        System.out.println("The pattern being used is " +
            sdf.toPattern());
        System.out.println("A sample date looks like " +
            sdf.format(sampleDate));
    }
}

dê uma olhada se isto te ajuda!

att
UP.COM

D

Resolvi dessa forma :

SimpleDateFormat returnDateSF = new SimpleDateFormat("HHmmssSSS");
              
          Calendar date = Calendar.getInstance();
          date.setTime(dateSF.parse(startDateValue));
             
             Calendar endDate = Calendar.getInstance();
             endDate.setTime(endSF.parse(endDateValue));
             
             endDate.add(Calendar.HOUR_OF_DAY, -date.get(Calendar.HOUR_OF_DAY));
             endDate.add(Calendar.MINUTE, -date.get(Calendar.MINUTE));
             endDate.add(Calendar.SECOND, -date.get(Calendar.SECOND));
             endDate.add(Calendar.MILLISECOND, -date.get(Calendar.MILLISECOND));

             String endTime = returnDateSF.format(endDate.getTime());
Criado 13 de dezembro de 2011
Ultima resposta 14 de dez. de 2011
Respostas 6
Participantes 4