双重时间单位转换

jos*_*eph 1 java timeunit

当结果> 1时,TimeUnit.toSeconds效果很好。但是,由于我们要处理long,因此如果结果介于0和1之间(不包括),我们将得到0。一个Java SDK函数可以为我们处理双重转换吗?

我知道我可以自己乘以或除以适当的两倍来完成这些转换。但是,它容易出错,并且不能很好地阅读。我更喜欢使用Java SDK中的现有功能,类似于Java的TimeUnit。

展示我的情况的最小示例:

import java.util.*;
import java.util.concurrent.*;
public class Main {
    public static void main(String[] args) {
        System.out.println(TimeUnit.MILLISECONDS.toSeconds(1));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
Run Code Online (Sandbox Code Playgroud)

我想要一个处理双精度函数并返回0.001的函数

Ole*_*.V. 5

korolar的建议太好了,应该作为一个答案并采用适当的格式。它为您提供所需的大约一半。如果您要自己进行乘法或除法,则至少可以从库枚举中获取要乘或除的数字。

public static double millisToSeconds(long millis) {
    return (double) millis / TimeUnit.SECONDS.toMillis(1);
}
Run Code Online (Sandbox Code Playgroud)

现在millisToSeconds(1)给出0.001。我同意JB Nizet和VGR的评论,您应该将计算结果包装在一个名称不错的方法中,以保持代码的可读性。如果您希望该方法更通用:

public static double convertTimeUnit(double amount, TimeUnit from, TimeUnit to) {
    // is from or to the larger unit?
    if (from.ordinal() < to.ordinal()) { // from is smaller
        return amount / from.convert(1, to);
    } else {
        return amount * to.convert(1, from);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在convertTimeUnit(1, TimeUnit.MILLISECONDS, TimeUnit.SECONDS)像以前一样给出0.001,而convertTimeUnit(1, TimeUnit.SECONDS, TimeUnit.MILLISECONDS)给出1000.0。