如何将秒转换为累积的hhh:mm:ss?

时间:2015-07-14 15:52:18

标签: java time seconds elapsedtime

我想将累计秒数的经过时间转换为小时:分钟:秒。例如

93599秒:

25:59:59

我该怎么做? (注意:24小时不应换成0小时)

4 个答案:

答案 0 :(得分:3)

模数运算符%在这里很有用。像这样的东西会运作良好

public static void convertTime(int seconds) {
    int secs = seconds % 60;
    int mins = (seconds / 60) % 60;
    int hours = (seconds / 60) / 60;
    System.out.printf("%d:%d:%d", hours, mins, secs);
}

答案 1 :(得分:1)

Java 8提供java.time.Duration类来表达时间量。您可以使用Duration#ofSeconds(long)从秒构建实例。

Duration ellapsed = Duration.ofSeconds(93599);

但是,默认的toString格式似乎是

PT25H59M59S

这不是你想要的。您可以自己进行数学运算(使用各种toMinutestoHours等)将其转换为您想要的格式。给出了一个例子here

答案 2 :(得分:0)

小时= 93599/3600。使用整数运算强制截断。

然后从93599减去小时* 3600.称之为foo。或计算93599%3600。

minutes = foo / 60.使用整数运算。

从foo减去分钟* 60。叫那个吧。或者计算foo%60。

bar是剩余秒数。

答案 3 :(得分:-4)

复制并使用此课程:

public class AccumulatedTimeFormat extends Format {

@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
    Long totalSeconds;

    if(obj instanceof Byte) {
        totalSeconds=((Byte)obj).longValue();
    } else if(obj instanceof Short) {
        totalSeconds=((Short)obj).longValue();
    } else if(obj instanceof Integer) {
        totalSeconds=((Integer)obj).longValue();
    } else if(obj instanceof Long) {
        totalSeconds=((Long)obj);
    } else {
        throw new IllegalArgumentException("Cannot format given Object as an accumulated-time String!");
    }

    long ss = Math.abs(totalSeconds) % 60;
    long mm = (Math.abs(totalSeconds) / 60) % 60;
    long h = (Math.abs(totalSeconds) / 60) / 60;

    if(totalSeconds<0) {
        toAppendTo.append('-');
    }
    toAppendTo.append(String.format("%d:%02d:%02d", h, mm, ss));

    return toAppendTo;
}

@Override
public Object parseObject(String source, ParsePosition pos) {
    //TODO Implement if needed!
    return null;
}

}

像这样:

System.out.println((new AccumulatedTimeFormat()).format(93599));

打印哪些:

25:59:59