2010-09-30 4 views
20

Je me demandais s'il existe un moyen facile d'obtenir l'heure actuelle dans le code Android natif. Idéalement, ce serait quelque chose de comparable à System.getTimeMillies(). Je l'utiliserai seulement pour voir combien de temps certains appels de fonction prendront donc une variable longue avec le temps actuel en millisecondes serait la solution optimale pour moi.Comment obtenir l'heure actuelle en code Android natif?

Merci d'avance!

Répondre

13

Pour une résolution de l'ordre de la microseconde, vous pouvez utiliser gettimeofday(). Ceci utilise "l'heure de l'horloge murale", qui continue d'avancer lorsque l'appareil est en veille, mais qui est sujet à des changements brusques vers l'avant ou vers l'arrière si le réseau met à jour l'horloge de l'appareil.

Vous pouvez également utiliser clock_gettime (CLOCK_MONOTONIC). Cela utilise l'horloge monotone, qui ne saute jamais en avant ou en arrière, mais arrête de compter quand l'appareil dort.

La résolution réelle des temporisateurs dépend du périphérique.

Les deux sont des API POSIX, pas spécifiques à Android.

+0

CLOCK_BOOTTIME (depuis Linux 2.6.39, Linux spécifique) serait mieux? –

22

Pour les paresseux, ajoutez au sommet de votre code:

#include <time.h> 

// from android samples 
/* return current time in milliseconds */ 
static double now_ms(void) { 

    struct timespec res; 
    clock_gettime(CLOCK_REALTIME, &res); 
    return 1000.0 * res.tv_sec + (double) res.tv_nsec/1e6; 

} 

Appelez comme ceci:

double start = now_ms(); // start time 

// YOUR CODE HERE 

double end = now_ms(); // finish time 

double delta = end - start; // time your code took to exec in ms 
+1

la paresse prévaut encore une fois \ o /, merci beaucoup torger! – Sipty

+1

Gardez à l'esprit que 'CLOCK_REALTIME' n'est pas monotone, utilisez' CLOCK_MONOTONIC' si vous avez besoin de temps non décroissant. – Simon

3

Un autre pour les paresseux, cette fonction retourne l'heure actuelle en nanosecondes en utilisant CLOCK_MONOTONIC

#include <time.h> 
#define NANOS_IN_SECOND 1000000000 

static long currentTimeInNanos() { 

    struct timespec res; 
    clock_gettime(CLOCK_MONOTONIC, &res); 
    return (res.tv_sec * NANOS_IN_SECOND) + res.tv_nsec; 
}