2014-04-01 151 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));