Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么TimeUnit.convert()在Java中不能正确转换?_Java_Time_Converter - Fatal编程技术网

为什么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