我有一个程序,可以以天/小时/分钟等形式转换给定的分钟数。
如果天数= 0,我尝试不显示部分x days
。同样,小时和分钟也是如此。
因此,一些示例输出将是:
5 days
-
5 days 2 hrs
-
2 hrs 10 mins
等
如何在不使打印语句与一元三元运算符混淆的情况下做到这一点?
我当前的解决方案是:
final StringBuilder remDaysBuilder = new StringBuilder();
long remMins = Math.abs(request.getTimeRemaining());
final int remDays = (int) (remMins / 1440);
if (remDays > 0) {
remDaysBuilder.append(remDays + " Days");
}
remMins = remMins % 1440;
final int remHrs = (int) (remMins / 60);
if (remHrs > 0) {
remDaysBuilder.append(remHrs + " Hrs");
}
remMins = remMins % 60;
if (remMins > 0) {
remDaysBuilder.append(remMins + " Mins");
}
但是我觉得对于这么小的逻辑来说,这是太多代码了!
答案 0 :(得分:0)
final StringBuilder remDaysBuilder = new StringBuilder();
long remMins = Math.abs(request.getTimeRemaining());
final int remDays = remMins/24/60;
final int remHours = remMins/60%24;
final int remMins = remMins % 60;
remDaysBuilder
.append(String.format("%s",(remDays>0)?(Integer.toString(remDays)+" days "):"")
.append(String.format("%s",(remHours>0)?(Integer.toString(remHours)+" days "):"")
.append(String.format("%s",(remMins>0)?(Integer.toString(remMins)+" days "):"");
这样,它变得更易读,也更简短。
答案 1 :(得分:0)
通过编写辅助子例程减少重复。
首先...
private static long addTerm(StringBuilder sb, long rem, int div, String what) {
int n = (int)(rem / div);
if (n > 0) sb.append(n)
.append(' ')
.append(what)
.append(n > 1 ? "s " : " ");
return rem % div;
}
然后...
StringBuilder sb = new StringBuilder();
long remMins = Math.abs(request.getTimeRemaining());
remMins = addTerm(sb, remMins, 1440, "Day");
remMins = addTerm(sb, remMins, 60, "Hr");
remMins = addTerm(sb, remMins, 1, "Min");
(此代码没有经过彻底检查,但足以传达这个想法)
答案 2 :(得分:0)
根据Elliott的建议,我使用了images
软件包,它降低了很多复杂性,但显然对java.time.Duration
语句没有任何作用。
在搜索了SO之后,我发现DurationFormatUtils非常适合我的目的。