1. 程式人生 > >比毫秒System.currentTimeMillis()更精確的時間戳(納米級時間戳)

比毫秒System.currentTimeMillis()更精確的時間戳(納米級時間戳)

  ns(nanosecond):納秒, 時間單位。一秒的10億分之一,即等於10的負9次方秒。常用作 記憶體讀寫速度的單位,其前面數字越小則表示速度越快。   1納秒=1000 皮秒    1納秒 =0.001  微秒   1納秒=0.000001 毫秒

  1納秒=0.00000 0001

java的System.currentTimeMillis()和System.nanoTime()有什麼區別

java中System.nanoTime()返回的是納秒,nanoTime而返回的可能是任意時間,甚至可能是負數……按照API的說明,nanoTime主要的用途是衡量一個時間段,比如說一段程式碼執行所 用的時間,獲取資料庫連線所用的時間,網路訪問所用的時間等。另外,nanoTime提供了納秒級別的精度,但實際上獲得的值可能沒有精確到納秒。

但總的來說,這兩個函式的用途是完全不一樣的!

java中System.currentTimeMillis()返回的毫秒,這個毫秒其實就是自1970年1月1日0時起的毫秒數,Date()其實就是相當於Date(System.currentTimeMillis());因為Date類還有構造Date(long date),用來計算long秒與1970年1月1日之間的毫秒差。

[摘要:比來專案開闢,須要獵取到當前時光而且切確到微秒。然則一查材料發明乎只能切確到到毫秒級,經過 SimpleDateFormat formatter = new SimpleDateFormat(yyyyMMddHHmmssSSS); String str = formatter.format(new]

最近專案開發,需要獲取到當前時間並且精確到微秒。但是一查資料發現似乎只能精確到到毫秒級,通過

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");

        String str = formatter.format(new Date());

或者

Calendar calendar = Calendar.getInstance();
        long mm = calendar.get(Calendar.MILLISECOND);

最後幾經周折,可以通過c程式碼得到得到當前時間的微秒值,於是便通過jni方式得到了時間的微秒值。

其中c程式碼:

JNIEXPORT jlongArray JNICALL Java_com_test_ndkhelloword_MainActivity_getTimesFromJni(
        JNIEnv *env, jobject thiz) {
    jlongArray time = env->NewLongArray(2);
    jlong temp[] = { 0, 0 };
    struct timeval begin;
    gettimeofday(&begin, NULL);
    temp[0] = begin.tv_sec;
    temp[1] = begin.tv_usec;
    env->SetLongArrayRegion(time, 0, 2, temp);
    return time;
}

還好最後找到了辦法,特此分享。