2011-11-05 7 views
2

J'ai regardé l'autre Q & A concernant ce sujet, mais n'a pas trouvé quoi que ce soit qui a aidé.android - différence de temps

Mon application enregistre les résultats de course et les enregistre dans un fichier.

Au premier clic, il écrit l'heure actuelle, et quand un coureur a terminé, il enregistre à nouveau l'heure actuelle.

Comment puis-je calculer les deux temps pour obtenir le temps de course?

Voici comment je reçois l'heure actuelle:

public class Stopwatch extends Activity { 
// GUI controls 
Button startRun; 
Button checkIn; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setRequestedOrientation(
     ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     setContentView(R.layout.stopwatch); 

     final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); 


     startRun = (Button) findViewById(R.id.start); 
     startRun.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
     try { 
      BufferedWriter out = new BufferedWriter(new FileWriter("/sdcard/timer.txt")); 
      out.write("Race start time" + "," + dateFormat.format(new Date())); 
      out.write("\r\n"); 
      out.close(); 
     } catch (Exception e) { 
     } 

     startRun.setEnabled(false); 

    } 
    }); 

     checkIn = (Button) findViewById(R.id.counter); 
     checkIn.setOnClickListener(new OnClickListener() { 

      private int entryCounter = 1; 

     public void onClick(View v) { 
     try { 
      BufferedWriter out = new BufferedWriter(new FileWriter("/sdcard/timer.txt", true)); 
      out.write(entryCounter + "," + dateFormat.format(new Date()) + "," ***time difference here***); 
      entryCounter++; 
      out.write("\r\n"); 
      out.close(); 
     } catch (Exception e) { 
     } 

    } 
    }); 



    } 

}

je suis à la recherche d'un format comme celui-ci

0,01/10/2011 09:02:00 
1,01/10/2011 09:18:42,00:16:42 
2,01/10/2011 09:18:42,00:16:42 
3,01/10/2011 09:20:07,00:18:07 
+0

Souhaitez-vous soustraire les heures pour obtenir le temps écoulé? –

+0

Oui, je dois soustraire l'heure de départ du temps au tour pour obtenir le temps d'exécution. mais il doit imprimer ce format. mon code fait tout en dehors du temps d'exécution – Leigh8347

Répondre

1
long start = System.currentTimeMillis(); 
// ... the race 
long end = System.currentTimeMillis(); 
long raceDurationInMillis = end - start; 

Vous pouvez être plus précis et l'utilisation System.nanoTime, mais je doute que cela fasse une différence significative.

+0

alors comment j'écrirais cela dans thischeckIn = (Button) findViewById (R.id.counter); \t \t checkIn.setOnClickListener (nouveau OnClickListener() { \t \t \t \t \t \t private int entryCounter = 1; \t \t public void onClick (Voir v) { \t \t \t try { \t \t \t BufferedWriter sur = new BufferedWriter (nouveau fichier FileWriter ("/ sdcard/timer.txt", true)); \t \t \t out.w rite (entryCounter + "," + dateFormat.format (nouvelle Date()) + "," [différence pour aller ici]); \t \t \t entryCounter ++; \t \t \t out.write ("\ r \ n"); \t \t \t sortie.Fermer(); \t \t \t} catch (Exception e) { \t \t \t} \t \t} // onClick \t \t}); // btnWriteSDFile – Leigh8347

+0

le concaténer avec +!? –

3

Vous devez utiliser la méthode currentTimeMillis()

long millisecondssince1970 = System.currentTimeMillis(); 

après que vous pouvez obtenir le nouveau temps et calculer la différence

long newTime = System.currentTimeMillis(); 
long raceTimeinMilliseconds = newTime - millisecondssince1970; 

En plus de cela, vous pouvez utiliser la méthode getTime() des objets Date pour cela. Cette méthode renvoie également une valeur en millisecondes.

+0

merci pour cela, mais comment pourrais-je le mettre dans ce – Leigh8347