为什么TimeUnit.convert()在Java中不能正确转换?
所以我试着把时间从纳秒转换成分钟。 我的代码如下所示:为什么TimeUnit.convert()在Java中不能正确转换?,java,time,converter,Java,Time,Converter,所以我试着把时间从纳秒转换成分钟。 我的代码如下所示: long startTime=System.nanoTime(); //some code... long endTime=System.nanoTime(); long estimatedTime=endTime-startTime; long estimatedTime2=TimeUnit.MINUTES.convert(estimatedTime, TimeUnit.NANOSECONDS); System.out.println(
long startTime=System.nanoTime();
//some code...
long endTime=System.nanoTime();
long estimatedTime=endTime-startTime;
long estimatedTime2=TimeUnit.MINUTES.convert(estimatedTime, TimeUnit.NANOSECONDS);
System.out.println(estimatedTime2 +","+estimatedTime);
输出:
estimatedTime is always in nanoseconds
estimatedTime2 is always 0;
根据JavaDoc-:
该方法假定将long
返回到estimatedTime2
使用此转换类型的正确形式是什么
谢谢你 除非结束时间和开始时间之间的差异超过一分钟,否则答案是零。请注意,convert()返回值不是浮点或双精度(表示没有小数点)您也可以简单地手动执行,而无需所有开销-
float minutesElapsed = estimatedTime / 1000 / 1000 / 1000 / 60;
nano / 1000 -> micro / 1000 -> milli / 1000 -> sec / 60 -> minutes
或者与观察到的和预期的行为描述一起。estimatedTime2始终为0的可能性可能是因为计算出的estimatedTime为0,因为在开始时间和结束时间之间没有足够的时间。请在尝试求解estimatedTime2之前打印出estimatedTime,然后查看打印结果还有estimatedTime,请查看其值。如果它的值太小,无法转换为分钟,您将始终得到零。为什么要打印两次
estimatedTime2
?谢谢!那么,有没有一种优雅的方法可以将小于60秒的时间转换为分钟呢?不使用硬编码的数字进行除法。
float minutesElapsed = estimatedTime / 1000 / 1000 / 1000 / 60;
nano / 1000 -> micro / 1000 -> milli / 1000 -> sec / 60 -> minutes