2010-09-30 74 views
20

我想知道是否有一種簡單的方法來獲取原生Android代碼中的當前時間。最佳情況是它可以與System.getTimeMillies()相媲美。我只會使用它來查看某些函數調用需要多長時間,因此以毫秒爲單位的當前時間的長變量對我來說是最佳解決方案。如何在原生Android代碼中獲取當前時間?

提前致謝!

回答

13

對於微秒分辨率,您可以使用gettimeofday()。這使用「掛鐘時間」,當設備睡着時它會繼續前進,但如果網絡更新設備的時鐘則會突然向前或向後移動。

您還可以使用clock_gettime(CLOCK_MONOTONIC)。這使用單調時鐘,它永遠不會向前或向後移動,但在設備休眠時停止計數。

定時器的實際分辨率取決於設備。

這兩個都是POSIX API,而不是Android特定的。

+0

CLOCK_BOOTTIME(因爲Linux 2.6.39;特定於Linux)會更好嗎? – 2015-06-01 02:53:18

22

專爲懶人設計,它添加到您的代碼的頂部:

#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; 

} 

這樣稱呼它:

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

懶惰再次流行\ o /,許多感謝torger! – Sipty 2016-01-06 11:48:25

+1

請記住,'CLOCK_REALTIME'不是單調的,如果您需要非遞減時間,請使用'CLOCK_MONOTONIC'。 – Simon 2016-03-13 13:10:29

3

另外一個懶惰的,該函數將返回納秒當前時間使用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; 
}