从分钟计算天、小时、分钟
Day, Hour, Min Calculation from the Minutes
显示总分钟数中的日、时、分的要求如下:
我正在从硬件设备获取会议记录。
6050分钟显示为:4d 5h(是4天4小时50分钟,50分钟我们四舍五入为1小时)
6090分钟显示为:4d 6h(是4天5小时30分钟,30分钟我们四舍五入为1小时)
6089分钟显示为4d 5h(是4天5小时29分钟,29分钟我们四舍五入到0小时)
其他需要注意的事情是0d 0h和0m应该显示为0m .
还有一件事是:如果总小时> 100,它应该不显示分钟。
到目前为止,我已经尝试如下实现它但没有得到正确的输出:
fun minutesToDaysHoursMinutes(time: Double): String? {
val hourFromMinute: Double = time * 60.0
val d: Duration = Duration.ofMinutes(time.toLong())
val days: Long = d.toDays()
val hours: Long = d.toHours() % 24
val minutes: Long = d.toMinutes() % 60
if (hourFromMinute > 100) {
if (minutes >= 30) {
if (days == 0L && hours != 0L) {
return String.format("%2dh", hours)
}
if (days != 0L && hours == 0L) {
return String.format("%2dd", days)
}
return String.format("%2dd %2dh", days, (hours + 1))
} else {
if (days == 0L && hours != 0L) {
return String.format("%2dh", hours)
}
if (days != 0L && hours == 0L) {
return String.format("%2dd", days)
}
if (days == 0L && hours == 0L) {
return String.format("%2dm", minutes)
}
return String.format("%2dd %2dh", days, hours)
}
} else {
var stringDays = "" + days
if (stringDays.toInt()<=0) {
stringDays = ""
} else {
stringDays = stringDays + "d"
}
var stringHours = "" + hours
if (stringHours.toInt()<=0) {
stringHours = ""
} else {
stringHours = stringHours + "h"
}
var stringMinutes = "" + minutes
if (stringMinutes.toInt()<=0) {
stringMinutes = "0m"
} else {
stringMinutes = stringMinutes + "m"
}
return stringDays + " " + stringHours + " " + stringMinutes
}
我可以显示正确的值,但有更好的方法吗?
谢谢。
好吧,您有很多 if 语句,其中重复了大致相同的代码。此外,您的 minutesToDaysHoursMinutes
方法正在做两件事:四舍五入和格式化输出。
我认为你应该把这两个职责放在两个不同的方法中。
四舍五入
首先,您可以按照以下方式进行创建:
Duration roundFromMinutesToHours(double minutes) {
var duration = Duration.ofMinutes((long) minutes);
long hoursToAdd = (duration.toMinutesPart() < 30 ? 0 : 1);
return duration.truncatedTo(ChronoUnit.HOURS).plusHours(hoursToAdd);
}
此方法接受分钟数,然后向上或向下舍入到小时数,舍弃分钟值。请注意,此方法使用 Duration::toMinutesPart
,自 Java 9 起可用。toMinutesPart
不 return 总数 分钟,如 toMinutes()
,但 return 是一小时 内的分钟数 。请注意,此方法 return 是一个 Duration
具有四舍五入到整小时值的值。
现在你有一个很好的圆角持续时间,你可以在下面的方法中使用它。
格式化
那么你可以把Duration
的格式写成这样:
String formatDuration(Duration duration) {
if (duration.isZero()) {
return "0m";
}
var result = String.format("%sd %sh", duration.toDays(), duration.toHoursPart());
if (duration.toHours() <= 100) {
result += " 0m";
}
return result;
}
如果持续时间为 0(因此最初 < 30 分钟),则 return“0 分钟”。否则,return "xd yh" 或 "xd yh zm",其中 x、y 和 z分别为天数、小时数和分钟数,根据总小时数是否大于100。
显示总分钟数中的日、时、分的要求如下:
我正在从硬件设备获取会议记录。
6050分钟显示为:4d 5h(是4天4小时50分钟,50分钟我们四舍五入为1小时)
6090分钟显示为:4d 6h(是4天5小时30分钟,30分钟我们四舍五入为1小时)
6089分钟显示为4d 5h(是4天5小时29分钟,29分钟我们四舍五入到0小时)
其他需要注意的事情是0d 0h和0m应该显示为0m .
还有一件事是:如果总小时> 100,它应该不显示分钟。
到目前为止,我已经尝试如下实现它但没有得到正确的输出:
fun minutesToDaysHoursMinutes(time: Double): String? {
val hourFromMinute: Double = time * 60.0
val d: Duration = Duration.ofMinutes(time.toLong())
val days: Long = d.toDays()
val hours: Long = d.toHours() % 24
val minutes: Long = d.toMinutes() % 60
if (hourFromMinute > 100) {
if (minutes >= 30) {
if (days == 0L && hours != 0L) {
return String.format("%2dh", hours)
}
if (days != 0L && hours == 0L) {
return String.format("%2dd", days)
}
return String.format("%2dd %2dh", days, (hours + 1))
} else {
if (days == 0L && hours != 0L) {
return String.format("%2dh", hours)
}
if (days != 0L && hours == 0L) {
return String.format("%2dd", days)
}
if (days == 0L && hours == 0L) {
return String.format("%2dm", minutes)
}
return String.format("%2dd %2dh", days, hours)
}
} else {
var stringDays = "" + days
if (stringDays.toInt()<=0) {
stringDays = ""
} else {
stringDays = stringDays + "d"
}
var stringHours = "" + hours
if (stringHours.toInt()<=0) {
stringHours = ""
} else {
stringHours = stringHours + "h"
}
var stringMinutes = "" + minutes
if (stringMinutes.toInt()<=0) {
stringMinutes = "0m"
} else {
stringMinutes = stringMinutes + "m"
}
return stringDays + " " + stringHours + " " + stringMinutes
}
我可以显示正确的值,但有更好的方法吗? 谢谢。
好吧,您有很多 if 语句,其中重复了大致相同的代码。此外,您的 minutesToDaysHoursMinutes
方法正在做两件事:四舍五入和格式化输出。
我认为你应该把这两个职责放在两个不同的方法中。
四舍五入
首先,您可以按照以下方式进行创建:
Duration roundFromMinutesToHours(double minutes) {
var duration = Duration.ofMinutes((long) minutes);
long hoursToAdd = (duration.toMinutesPart() < 30 ? 0 : 1);
return duration.truncatedTo(ChronoUnit.HOURS).plusHours(hoursToAdd);
}
此方法接受分钟数,然后向上或向下舍入到小时数,舍弃分钟值。请注意,此方法使用 Duration::toMinutesPart
,自 Java 9 起可用。toMinutesPart
不 return 总数 分钟,如 toMinutes()
,但 return 是一小时 内的分钟数 。请注意,此方法 return 是一个 Duration
具有四舍五入到整小时值的值。
现在你有一个很好的圆角持续时间,你可以在下面的方法中使用它。
格式化
那么你可以把Duration
的格式写成这样:
String formatDuration(Duration duration) {
if (duration.isZero()) {
return "0m";
}
var result = String.format("%sd %sh", duration.toDays(), duration.toHoursPart());
if (duration.toHours() <= 100) {
result += " 0m";
}
return result;
}
如果持续时间为 0(因此最初 < 30 分钟),则 return“0 分钟”。否则,return "xd yh" 或 "xd yh zm",其中 x、y 和 z分别为天数、小时数和分钟数,根据总小时数是否大于100。