2011-06-30 12 views
5

Jestem stoi dziwny wynik przy formatowaniu milisekund do formatu SimpleDate:Format milisekund do simpledate formatu

wyjścia:

Start date time: 11/06/30 09:45:48:970 
    End date time: 11/06/30 09:45:52:831 
    Execution time: 01:00:03:861 

Scenariusz:

long dateTimeStart = System.currentTimeMillis();  
    // some script execution here 
    long dateTimeEnd = System.currentTimeMillis(); 

    "Start date time: " + GlobalUtilities.getDate(dateTimeStart, "yy/MM/dd hh:mm:ss:SSS"); 
    "End date time: " + GlobalUtilities.getDate(dateTimeEnd, "yy/MM/dd hh:mm:ss:SSS"); 
    "Execution time: " + GlobalUtilities.getDate((dateTimeEnd - dateTimeStart), "hh:mm:ss:SSS"); 

Metoda:

public static String getDate(long milliseconds, String format) 
    { 
     SimpleDateFormat sdf = new SimpleDateFormat(format); 
     return sdf.format(milliseconds); 
    } 

Każdy pomysł dlaczego wartość czasu wykonania jest tak wyłączona? Powinno być 00: 00: 03: 861, a nie 01: 00: 03: 861

Dzięki

Odpowiedz

1

Czas realizacji jest wyłączony, ponieważ Data konstruktor trwa długo określając liczbę milisekund od 1970-01- 01.

+0

I jak mogę to naprawić? – user706058

+2

Oto kolejna odpowiedź stackoverflow z kilkoma naprawdę fajnymi pomysłami! http://stackoverflow.com/questions/625433/how-to-convert-milliseconds-to-x-mins-x-seconds-in-java –

+0

Ponadto, jako notatkę dodatkową, mogę naprawdę polecić interfejs API JodaTime podczas transakcji z datami w Javie. To naprawdę dużo ładniejsze niż wbudowane daty Java. http://joda-time.sourceforge.net/ –

3

ponieważ przeliczono różnicę czasu na datę. W szczegółach, to jest dokładnie to, co się dzieje:

  1. SimpleDateFormat.format (długie milisekundy) oblicza datę: Unix Czas urodzenia + milisekund.
  2. Ten czas jest również korygowany o różnicę czasu od GMT.
  3. Dzięki tym dwóm informacjom uzyskasz dziwny wynik. Aby zweryfikować powyższe informacje, możesz dodać dzień, miesiąc i rok do daty.

Niestety, można to naprawić, ręcznie konwertując swój czas.

Powiązane problemy