分钟和秒格式

时间:2015-04-09 00:04:57

标签: java

这有点乱,但我正在尝试将计算出的时间格式化为

的格式化显示
MM mins SS.sssssssss secs

例如:

08 mins 33.324423323 secs

下面我有我的代码,但我一直遇到的一个问题是秒数有时会超过60,这显然是错误的。正如你所看到的,我已经将mod操作应用于秒,但这仍然没有帮助。我想我错过了一些小事。

FYI此方法将纳秒作为参数,然后将其转换为分钟/秒。

private static String printTime(long nanos){
    String time = "";
    double ms = ((double)nanos)/1000000;
    float nano = nanos;
    double sec = ms/1000;
    long min = (long)sec/60;

    nano %= 1000000000;
    nano /= 1000000000;
    sec %= 60;

    time = String.format("%02d mins %2.0f%9.9f secs",min,sec,nano);

    return time;
}

2 个答案:

答案 0 :(得分:0)

这是我用来将String转换为包含nanos的Timestamp的代码。在这种情况下,String表示长包含unix时间,包括纳秒。

public static Timestamp convertToTimestamp(String in) {

    BigDecimal dt = new BigDecimal (in);
    BigDecimal remainder = dt.remainder(BigDecimal.ONE);
    dt = dt.subtract(remainder);
    dt = dt.scaleByPowerOfTen(3);

    Timestamp ts = new Timestamp(dt.longValue());
    int nano = remainder.scaleByPowerOfTen(9).intValue();
    ts.setNanos(nano);
    return (ts);

}

我确信我从某个地方偷了这个代码。

答案 1 :(得分:0)

摆脱浮点数学。坚持整数。使用浮点引入了不期望的精度误差的可能性。对于整数,你不必处理小数位数和所有这些令人头疼的问题。

private static String printTime(long ticks) {
    long nano = ticks % 1000000000; ticks /= 1000000000;
    long sec  = ticks % 60;         ticks /= 60;
    long min  = ticks;

    return String.format("%02d mins %02d%09d secs", min, sec, nano);
}