java - .toNanos() 方法无法正常工作
问题描述
我试图制定一种方法,让我知道我的程序运行需要多少时间,但由于未知原因,我无法获得纳秒。
我试图阅读以下课程,但找不到我做错了什么: import 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()
解决方案
我会同意@Pshemo 关于Instant.now()
.
https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#now--:
这将查询系统 UTC 时钟以获取当前时刻。
链接指向的位置:
这可以使用 System.currentTimeMillis(),或者更高分辨率的时钟(如果有的话)。
因此它可能具有也可能不具有比毫秒更高的精度。在您的情况下,“可能没有”似乎适用。
推荐阅读
- ios - 无法使用后台配置创建 URLSessionWebSocketTask
- javascript - 如何避免在每次渲染时执行 useState 函数参数(获取初始值)?
- c# - 在 C# 中是否可以检查给定的日期格式字符串是否仅包含日期格式或时间格式?
- nginx - Nginx域解析502网关
- user-interface - 无法为 Pact 代理启动 UI
- javascript - Nodejs通过超时5秒杀死了Sharp进程
- azure-devops - 使用 azure dev ops 将应用程序部署到本地环境
- user-interface - 我现在安装了 Visual Studio 2019,问题是我没有在 Visual C++ 中获得 UI 或 Windows 表单选项
- javascript - Discord.js UnhandledPromiseRejectionWarning:DiscordAPIError:无法发送空消息
- html - CSS - 斜线与空格的空白控制