我想使用 System.currentTimeMillis()
记录用户在我的程序中开始某些操作时的时间。当他完成后,我将从 start
变量中减去当前 System.currentTimeMillis()
--- 变量,我想用人类可读的格式向他们展示经过的时间,例如“XX 小时,XX 分钟, XX 秒”甚至“XX 分钟,XX 秒”,因为它不太可能占用某人一个小时。
最好的方法是什么?
原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想使用 System.currentTimeMillis()
记录用户在我的程序中开始某些操作时的时间。当他完成后,我将从 start
变量中减去当前 System.currentTimeMillis()
--- 变量,我想用人类可读的格式向他们展示经过的时间,例如“XX 小时,XX 分钟, XX 秒”甚至“XX 分钟,XX 秒”,因为它不太可能占用某人一个小时。
最好的方法是什么?
原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据@siddhadev 的回答,我编写了一个将毫秒转换为格式化字符串的函数:
/**
* Convert a millisecond duration to a string format
*
* @param millis A duration to convert to a string form
* @return A string of the form "X Days Y Hours Z Minutes A Seconds".
*/
public static String getDurationBreakdown(long millis) {
if(millis < 0) {
throw new IllegalArgumentException("Duration must be greater than zero!");
}
long days = TimeUnit.MILLISECONDS.toDays(millis);
millis -= TimeUnit.DAYS.toMillis(days);
long hours = TimeUnit.MILLISECONDS.toHours(millis);
millis -= TimeUnit.HOURS.toMillis(hours);
long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
millis -= TimeUnit.MINUTES.toMillis(minutes);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
StringBuilder sb = new StringBuilder(64);
sb.append(days);
sb.append(" Days ");
sb.append(hours);
sb.append(" Hours ");
sb.append(minutes);
sb.append(" Minutes ");
sb.append(seconds);
sb.append(" Seconds");
return(sb.toString());
}
原文由 Brent Writes Code 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
使用
java.util.concurrent.TimeUnit
类:注意:
TimeUnit
是 Java 1.5 规范的一部分,但是toMinutes
是从 Java 1.6 开始添加的。要为值 0-9 添加前导零,只需执行以下操作:
如果
TimeUnit
或toMinutes
不受支持(例如在 API 版本 9 之前的 Android 上),请使用以下等式: