如何在 Java 中将毫秒转换为“X 分钟,x 秒”?

新手上路,请多包涵

我想使用 System.currentTimeMillis() 记录用户在我的程序中开始某些操作时的时间。当他完成后,我将从 start 变量中减去当前 System.currentTimeMillis() --- 变量,我想用人类可读的格式向他们展示经过的时间,例如“XX 小时,XX 分钟, XX 秒”甚至“XX 分钟,XX 秒”,因为它不太可能占用某人一个小时。

最好的方法是什么?

原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 807
2 个回答

使用 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-9 添加前导零,只需执行以下操作:

 String.format("%02d min, %02d sec",
    TimeUnit.MILLISECONDS.toMinutes(millis),
    TimeUnit.MILLISECONDS.toSeconds(millis) -
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
);

如果 TimeUnittoMinutes 不受支持(例如在 API 版本 9 之前的 Android 上),请使用以下等式:

 int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours   = (int) ((milliseconds / (1000*60*60)) % 24);
//etc...

原文由 siddhadev 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题