这有点乱,但我正在尝试将计算出的时间格式化为
的格式化显示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;
}
答案 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);
}