如何使用System.currentTimeMillis()以秒为单位测量时间跨度?

J13*_*t0u 46 java milliseconds

如何转换System.currentTimeMillis();为秒?

long start6=System.currentTimeMillis();
System.out.println(counter.countPrimes(100000000)+" for "+start6);
Run Code Online (Sandbox Code Playgroud)

控制台告诉我5761455 for 1307816001290.我看不出多少秒.

有帮助吗?

JH.*_*JH. 76

TimeUnit

使用Java 5及更高版本中内置的枚举.TimeUnit

long timeMillis = System.currentTimeMillis();
long timeSeconds = TimeUnit.MILLISECONDS.toSeconds(timeMillis);
Run Code Online (Sandbox Code Playgroud)

  • 哇,之前没有听说过TimeUnit的事情. (4认同)

Nic*_*men 63

long start = System.currentTimeMillis();
counter.countPrimes(1000000);
long end = System.currentTimeMillis();

System.out.println("Took : " + ((end - start) / 1000));
Run Code Online (Sandbox Code Playgroud)

UPDATE

更准确的解决方案是:

final long start = System.nanoTime();
counter.countPrimes(1000000);
final long end = System.nanoTime();

System.out.println("Took: " + ((end - start) / 1000000) + "ms");
System.out.println("Took: " + (end - start)/ 1000000000 + " seconds");
Run Code Online (Sandbox Code Playgroud)

  • 为什么有人想在几秒钟内需要使用`nanoTime()`而不是`currentTimeMillis()`? (5认同)
  • 以纳秒为单位的时间需要除以10 ^ 9(1000000000)以秒为单位显示.无法编辑答案,因为我只需插入3个字符而不是所需的6个字符.:] (2认同)

Sta*_*aro 15

像这样:

(int)(milliseconds / 1000)
Run Code Online (Sandbox Code Playgroud)


Sca*_*dge 9

Java 8 现在提供了最简洁的方法来获取当前的 Unix 时间戳:

Instant.now().getEpochSecond();
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 8

从您的代码中可以看出,您正在尝试测量计算所花费的时间(而不是试图弄清楚当前时间是多少).

在这种情况下,您需要currentTimeMillis在计算之前和之后调用,取差异,并将结果除以1000以将毫秒转换为秒.