我创建了这样的方法,我有2个输入。
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这样的输入。任何想法如何改进我的解决方案以使用浮动数字?
答案 0 :(得分:3)
您可以使用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;
}
}