2012-09-17 20 views
5

Ho bisogno di formattare secondi e minuti in millisecondi. Sto usando countdownTimer. qualcuno ha delle sottigliezze? Ho guardato il tempo di Joda. Ma tutto ciò di cui ho bisogno è un formato in modo da avere 1:05 e non 1: 5. grazieFormattazione di secondi e minuti

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

Avete già guardato in SimpleNumberFormat? In alternativa puoi sempre aggiungere uno '0' a sinistra del tuo intero se è inferiore a 10. – BlackVegetable

+0

Non sono sicuro che soddisferà tutte le tue esigenze, ma potrebbe valere la pena dare un'occhiata [PrettyTime] (http://ocpsoft.org/prettytime/) – MadProgrammer

risposta

26

si potrebbe fare usando le classi di formattazione della data standard, ma potrebbe essere un po 'pesante. Vorrei solo usare il metodo String.format. Ad esempio:

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

Grande! era esattamente quello che stavo cercando! Non sono sicuro di aver capito "% d:% 02d" L'ho provato da solo e non ho capito bene. Grazie! –

+1

% segnala una sostituzione, 0 significa zero-pad il numero, 2 significa rendere la larghezza 2 e d significa visualizzare come numero decimale. Ecco la documentazione: http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html –

6

Un vero e proprio modo pigro di fare questo fino a quando si sa che non avrà più di 60 minuti è di fare solo una data e utilizzare 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

Ho utilizzato la classe Apache Commons StopWatch. L'output predefinito del suo metodo toString è ISO8601-like, hours: minutes: seconds.milliseconds.

Example of Apache StopWatch

2

userei

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