Java/Android中Duration.ofMinutes拆分时分时分钟显示错误如何解决?
问题根因
代码中调用的Duration.toMinutes()返回的是当前Duration对象对应的总分钟数,而非扣除整小时后剩余的分钟部分,才会出现总分钟数直接拼接的错误结果。
修复方案
分两种版本适配:
1. Java 9及以上版本
直接用Duration内置的toMinutesPart()方法,即可获取扣除整小时后的剩余分钟数:
int activeTimeValue = Integer.parseInt(activityTime); // ex: 10 mins int day = 1440; int restTimeInt = day - activeTimeValue; // 1430 mins Duration d = Duration.ofMinutes(restTimeInt); int restHours = (int) d.toHours(); int restMinutes = d.toMinutesPart(); // 直接获取剩余分钟,示例中1430分钟对应返回50 restTimeTV.setText(restHours + " hr " + restMinutes + " mins");
如果需要处理单复数显示(比如1小时显示1 hr,多小时显示hrs,分钟同理),可以加简单的判断逻辑:
String hourStr = restHours == 1 ? restHours + " hr" : restHours + " hrs"; String minuteStr = restMinutes == 1 ? restMinutes + " min" : restMinutes + " mins"; restTimeTV.setText(hourStr + " " + minuteStr);
2. Java 8兼容版本
如果你的项目还在使用Java 8,没有toMinutesPart()方法,手动对总分钟数取60的模即可得到剩余分钟:
int activeTimeValue = Integer.parseInt(activityTime); // ex: 10 mins int day = 1440; int restTimeInt = day - activeTimeValue; // 1430 mins Duration d = Duration.ofMinutes(restTimeInt); int restHours = (int) d.toHours(); int restMinutes = (int) (d.toMinutes() % 60); // 总分钟数对60取模得到剩余分钟 restTimeTV.setText(restHours + " hr " + restMinutes + " mins");
内容的提问来源于stack exchange,提问作者Caitlin
相关产品推荐
相关产品推荐

