2012-09-17 8 views
5

Potrzebuję formatować sekundy i minuty z milisekund. Używam countdownTimer. czy ktoś ma sugestie? Spojrzałem na czas joda. Ale wszystko, czego potrzebuję, to format, więc mam 1:05, a nie 1: 5. DziękiFormatowanie sekund i minut

private void walk() { 
    new CountDownTimer(15000, 1000) { 
     @Override 
     public void onFinish() { 
      lapCounter++; 
      lapNumber.setText("Lap Number: " + lapCounter); 
      run(); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      text.setText("Time left:" + millisUntilFinished/1000); 
     } 
    }.start(); 
} 
+0

Czy już spojrzał SimpleNumberFormat? Alternatywnie zawsze możesz dodać "0" po lewej stronie liczby całkowitej, jeśli jest mniejszy niż 10. – BlackVegetable

+0

Nie jestem pewien, czy spełni on wszystkie twoje potrzeby, ale może być wart obejrzenia [PrettyTime] (http: // /ocpsoft.org/prettytime/) – MadProgrammer

Odpowiedz

26

Można to zrobić za pomocą standardowe klasy formatowania daty, ale może to być trochę ciężkie. Po prostu użyłbym metody String.format. Na przykład:

int minutes = time/(60 * 1000); 
int seconds = (time/1000) % 60; 
String str = String.format("%d:%02d", minutes, seconds); 
+0

Świetnie! właśnie tego szukałem! nie jestem pewien, rozumiem "% d:% 02d" Próbowałem to na własną rękę i nie zrobił tego dobrze. Dzięki! –

+1

% oznacza zamiennik, 0 oznacza zero-pad numer, 2 oznacza szerokość 2, a d oznacza liczbę dziesiętną. Oto dokumentacja: http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html –

6

Prawdziwy leniwy sposób w ten sposób tak długo, jak wiesz, że nie będzie miał więcej niż 60 minut, to po prostu umówić się i korzystać SimpleDateFormat

public void onTick(long millisUntilFinished) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("mm:ss"); 
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
    Date date = new Date(millisUntilFinished); 
    text.setText("Time left:" + dateFormat.format(date)); 
} 
0

Użyłem klasy Apache Commons StopWatch. Domyślnym wyjściem tej metody toString jest ISO8601-podobne, godziny: minuty: sekundy.milisekundy.

Example of Apache StopWatch

2

chciałbym używać

org.apache.commons.lang.time.DurationFormatUtils.formatDuration(millisUntilFinished, "mm:ss")