Java 浮动值上的时间单位

Java 浮动值上的时间单位,java,time,timeunit,Java,Time,Timeunit,我创建了这样的方法,其中我有两个输入 first is type (e.g. 'd', 'h') second is value (e.g. "15", "0.5") 我创建了将其转换为分钟的函数,如下所示: public Float toMinutes(char type, String value) { Float minutes = 0f; switch (type) { case 'd': { minutes += Integer

我创建了这样的方法,其中我有两个输入

first is type (e.g. 'd', 'h')
second is value (e.g. "15", "0.5")
我创建了将其转换为分钟的函数,如下所示:

public Float toMinutes(char type, String value) {
    Float minutes = 0f;
    switch (type) {
        case 'd': {
            minutes += Integer.parseInt(value) * 1440;
            break;
        }
        case 'h': {
            minutes += Float.parseFloat(value) * 60;
            break;
        }
        case 'm': {
            minutes += Integer.parseInt(value);
            break;
        }
        default: {
            return 0f;
        }
    }
    return minutes;
}
我决定对它进行重构,因为那些乘法运算在我看来很“难看”。我找到了一个更好的解决方案,叫做TimeUnit

public Long toMinutes(char type, String value) {
        Long minutesCounted = 0l;
        TimeUnit tu = TimeUnit.MINUTES;
        switch (type) {
            case 'd': {
                minutesCounted += tu.convert(Long.parseLong(value), TimeUnit.DAYS);
                break;
            }
            case 'h': {
                minutesCounted += tu.convert(Long.parseLong(value), TimeUnit.HOURS);
                break;
            }
            case 'm': {
                minutesCounted += tu.convert(Long.parseLong(value), TimeUnit.MINUTES);
                break;
            }
            default: {
                return 0l;
            }
        }
    return minutesCounted;
}

问题是这个转换器只允许长值,所以现在它只能在输入端工作,比如15h,而不能在输入端工作,比如1,5h。有什么办法可以改进我使用浮点数的解决方案吗?

不用魔法常数,你可以用
TimeUnit
来计算1
d
h
等到分钟的转换率

public float toMinutes(char type, String value) {
    switch (type) {
        case 'd':
            return Integer.parseInt(value) * TimeUnit.DAYS.toMinutes(1);
        case 'h':
            return Float.parseFloat(value) * TimeUnit.HOURS.toMinutes(1);
        case 'm':
            return Integer.parseInt(value);
        default:
            return 0;
    }
}