如何在Java中将毫秒转换为“X分钟,x秒”?
我想记录用户在我的程序中开始某些内容时使用的时间。当他完成时,我将从变量中减去电流,我想使用人类可读的格式向他们显示经过的时间,例如“XX小时,XX分钟,XX秒”甚至“XX分钟,XX秒”,因为它不太可能花费某人一个小时。System.currentTimeMillis()
System.currentTimeMillis()
start
最好的方法是什么?
我想记录用户在我的程序中开始某些内容时使用的时间。当他完成时,我将从变量中减去电流,我想使用人类可读的格式向他们显示经过的时间,例如“XX小时,XX分钟,XX秒”甚至“XX分钟,XX秒”,因为它不太可能花费某人一个小时。System.currentTimeMillis()
System.currentTimeMillis()
start
最好的方法是什么?
使用 java.util.concurrent.TimeUnit
类:
String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
注意:是 Java 1.5 规范的一部分,但从 Java 1.6 开始添加。TimeUnit
toMinutes
要为值 0-9 添加前导零,只需执行以下操作:
String.format("%02d min, %02d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
如果 或 不受支持(例如在 API 版本 9 之前的 Android 上),请使用以下公式:TimeUnit
toMinutes
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
//etc...
根据@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());
}