。toNanos()方法无法正常工作

问题描述 投票:1回答:2

[我试图制作一种方法,使我可以了解程序运行需要多少时间,并且由于未知的原因,我无法获得纳秒级。

我试图阅读以下类,但找不到我在做什么错:导入java.time.Duration;导入java.time.Instant;

方法:

public static String calcExecutionTime(Instant startTime, Instant endTime) {
    if ((Duration.between(startTime, endTime).toNanos()) < 1000000) {
        return Duration.between(startTime, endTime).toNanos() + " nanoseconds.";
    } else if ((Duration.between(startTime, endTime).toMillis()) < 1000) {
        return Duration.between(startTime, endTime).toMillis() + " milliseconds.";
    } else if ((Duration.between(startTime, endTime).toSeconds()) < 100) {
        return Duration.between(startTime, endTime).toSeconds() + " seconds.";
    } else if ((Duration.between(startTime, endTime).toMinutes()) < 60) {
        return Duration.between(startTime, endTime).toMinutes() + " minutes.";
    } else {
        return Duration.between(startTime, endTime).toHours() + " hoursm.";
    }
}

主要在这里:

    Instant instantStart = Instant.now();
    Instant instantEnd = Instant.now();
    System.out.print("Execution time for this program: " + calcExecutionTime(instantStart, instantEnd));

如果我使用旧的System.nanoTime();我得到300-400纳秒的结果,但是在相同的情况下使用toNanos()我得到0。

编辑:我不使用getNano()我使用toNanos()

java java-8 duration nanotime
2个回答
0
投票

仔细阅读getNano()方法的描述:

获取此持续时间的秒数内的纳秒数。的持续时间的长度使用两个字段存储-秒和纳秒。纳秒部分是从0到999,999,999的值即以秒为单位的长度调整。总持续时间为通过调用此方法和getSeconds()定义。

纳米部分仅返回您当前秒的纳秒数。我实际上以代码示例撰写了有关此问题的简短文章:Java 8 java time package: converting Duration to miliseconds


0
投票

我会接受@Pshemo对Instant.now()的评论。

https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#now--

这将查询system UTC clock以获得当前时刻。

链接指向何处:

这可能使用System.currentTimeMillis(),或者使用更高分辨率的时钟(如果有的话。)>

因此它的精度可能会或可能不会高于毫秒。在您的情况下,“可能没有”似乎适用。

© www.soinside.com 2019 - 2024. All rights reserved.