本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>
提问:如何在Java中将毫秒转换为“ X分钟,x秒”?
我想在用户开始使用我的程序做一些事时,通过System.currentTimeMillis()获取当前时间,并将这个数据记录到变量start中,当用户完成自己的操作后,我希望用System.currentTimeMillis() 减去 start的值,以此获取用户操作时间。
现在我想将这个数据转换为人们平常使用的格式,比如几分几秒,或者几个小时几分几秒(当然这个概率很低,一般程序不会运行超过60分钟)
最好的解决方案是什么?
回答1:
使用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))
);
复制代码
注意:TimeUnit是Java 1.5规范的一部分,但toMinutes方法是Java从1.6开始才添加。
当秒数或者分钟是个位数时,我们需要为个位数再添加一个十位数0,通过以下操作:
String.format("%02d min, %02d sec",
TimeUnit.MILLISECONDS.toMinutes(millis),
TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);
复制代码
如果不支持TimeUnit或toMinutes(例如,在API版本9之前的Android上),请使用以下公式:
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
复制代码
一个完整的函数
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());
}
复制代码
简练而优雅的回答2:
long time = 1536259;
return (new SimpleDateFormat("mm:ss:SSS")).format(new Date(time));
复制代码
输出为
25:36:259
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END