2014-04-01 150 views
1
long startTime = System.nanoTime(); 
    long startTimer = System.currentTimeMillis(); 

    M = app.decriptare_simpla(C); 

    long endTime = System.nanoTime(); 
    long stopTimer = System.currentTimeMillis(); 

    //mesajul initial dupa decriptare 
    System.out.println("M : " + M.toString()); 
    System.out.println("Decriptarea a durat: " + (endTime - startTime)); 
    System.out.println("Decriptarea a durat: " + (stopTimer - startTimer)); 

這給了我:Nano和毫秒

Decriptarea a durat: 14811776 
Decriptarea a durat: 15 

我想問的是如何一秒鐘的多是那些2號?我的意思是他們是0.15,0.015,0.0015 ...?我想以這種方式打印它們,而不是long,但不知道要添加多少個小數。另一個數字也是同樣的問題。

+0

1秒= 1000毫秒= 1,000,000微秒= 1,000,000,000納秒 – assylias

+0

參考維基百科或其他的'毫'和'納米'前綴定義。 Java並沒有發明它們。 –

+0

啊,所以我應該只加3和9位小數。我懂了。他們認爲它們的含義與實時的不同。 –

回答

2

的轉換按照通常的規則Standard SI Units

long nanoSeconds = ... 
double microSeconds = nanoSeconds/1e3; 
double milliSeconds = microSeconds/1e3; 
double seconds = milliSeconds/1e3; 

// Shortcuts: 
double milliSeconds = nanoSeconds/1e6; 
double sconds = nanoSeconds/1e9; 

對於一些轉換,你也可以看看TimeUnit類:它允許轉換值之間在不同的時間單位,例如

long microSeconds = NANOSECONDS.toMicros(nanoSeconds); 

但是,不幸的是,它不允許在double精度中給出時間跨度,但僅作爲long值。


旁白,也是在評論中提到:測量時間在10-15ms的順序跨越通常是沒有意義的,由於內部計時器的分辨率有限。

+0

所以我應該使用'System.time.millis'而不是nano? –

+0

這取決於你的系統。如果大多數通用計算機都準確測量納秒級的時鐘,並且實際上大多數PC型計算機僅以10毫秒的時間間隔進行打點,我會感到驚訝。請記住,納秒會以更快的速度溢出長整型。 – arcy

+0

@rcook以納秒爲單位測量的時間差會在appx後溢出。 290年,所以這不應該是一個問題。可能有趣:http://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime – Marco13

0

你有沒有嘗試過這樣的

System.out.println(TimeUnit.SECONDS.convert((endTime - startTime), TimeUnit.NANOSECONDS)); 
System.out.println(TimeUnit.SECONDS.convert((stopTimer - startTimer), TimeUnit.MILLISECONDS));