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

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

danilão,

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

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!

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

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

[quote]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[/quote]


[code]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));
}

}[/code]

dê uma olhada se isto te ajuda!

att

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());
1 curtida