2.3 如何在Java中将毫秒转换为“ X分钟,x秒”?| Java Debug 笔记

本文正在参加「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
喜欢就支持一下吧
点赞0 分享