Java:将毫秒转换为HH:MM:SS

6

我可以帮您将以毫秒为单位的数值转换为HH:MM:SS.fff格式,这仅用于时间长度的目的。

我知道有一种基本的方法可以做到这一点:

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

但是有没有更好的方法来做到这一点呢?谢谢。

2
听说过 DateFormat API 吗??http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html - PermGenError
这是表示持续时间还是本地时间?(你应该看看Joda Time提供了什么。) - Jon Skeet
不要解释它。 - Sunny
@PermGenError:那可能不是合适的。例如,如果 OP 想要显示“70 分钟 20 秒”。 - Jon Skeet
1
不,我希望有一个标准格式,在59分钟后它会移动到1小时和0分钟。 - Sunny
2个回答

10

这个数学公式可以解决问题:

int sec  = (int)(millis/ 1000) % 60 ;
int min  = (int)((millis/ (1000*60)) % 60);
int hr   = (int)((millis/ (1000*60*60)) % 24);

如果您只想要分钟和秒钟, 那么:

int sec  = (int)(millis/ 1000) % 60 ;
int min  = (int)((millis/ (1000) / 60);

在使用格式 (HH:MM:SS) 进行字符串转换时,存在一个小问题。在五分钟内,它显示为:0:5:0 而不是 00:05:00。我该如何进行计算以解决这个问题? - Sunny

1
听起来你想要从Joda Time获取DurationPeriod。例如:
import org.joda.time.*;

public class Test {
    public static void main(String[] args) throws Exception {
        long millis = 12345678L; // Just an example
        PeriodType minutesEtc = PeriodType.time().withHoursRemoved();
        Period period = new Period(millis, minutesEtc);
        String text = String.format("%d min, %d sec",
                                    period.getMinutes(),
                                    period.getSeconds());
        System.out.println(text);
    }
}

(虽然你可以手动计算,但我个人会尽可能将其保留为Period。)

非常感谢,但我没有org.joda库。有没有Java API已经包含了我可以使用的? - Sunny
@Sunny:什么阻止你下载Joda?它比Java内置的任何日期/时间API都要好得多。 - Jon Skeet
我正在一个项目上工作,但是我没有添加新API/类的权限。如果有现有API的示例将会非常感激。 - Sunny
1
@Sunny:你应该在问题中明确表达。如果我是你,我会努力改变那种态度——“非我所创”综合症真的很让人头疼。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接