我被要求在算法开始前及结束时存储时间,还需要提供它们之间的差异(结束时间 - 开始时间)。有没有简短的方法来表示一个毫秒的时间?
但System.currentTimeMillis()
函数生成过长是值:
start=1497574732045
end=1497574732168
有没有办法让这个值只有3个位数,如“123”,但也可以作为使用System.currentTimeMillis()
功能精确?
我被要求在算法开始前及结束时存储时间,还需要提供它们之间的差异(结束时间 - 开始时间)。有没有简短的方法来表示一个毫秒的时间?
但System.currentTimeMillis()
函数生成过长是值:
start=1497574732045
end=1497574732168
有没有办法让这个值只有3个位数,如“123”,但也可以作为使用System.currentTimeMillis()
功能精确?
如果您需要分别存储开始和结束时间,则只有两种方法(我可以想到)使值更小。
首先,System.currentTimeMillis()
从1970年1月1日UTC算起。但是如果你的时钟永远不会在“现在”之前运行,你可以减去固定的时间。我选择了14975.80000000,因为它在我写这篇文章的时候绝对是过去的,而且它是一个很好的偶数。
其次,将数值除以您愿意失去的任何精度。在你的情况下,你可能不想这样做,但在这里我选择了100.
现在返回的数字看起来很小,但是它们会继续变大,因为当前时间与1497580000000之间的差异会变得更加明显。
首选的解决方案是完全不做这些,但只要能够存储长整型值即可。
你永远不会把一个大的精确数字变成只有3个十进制数字。不是没有量子力学。
{
long start = 1497584001010L;
long end = 1497584008000L;
System.out.println("Diff: " + (end - start));
int compactStart = compact(start);
int compactEnd = compact(end);
System.out.println("Compact Start: " + compactStart);
System.out.println("Compact End: " + compactEnd);
System.out.println("Diff: " + (expand(compactEnd) - expand(compactStart)));
}
private int compact(long millis) {
return (int)((millis - 1497580000000L)/100);
}
private long expand(int millis) {
return (millis + 1497584000000L)*100;
}
结果...
Diff: 6990
Compact Start: 40010
Compact End: 40080
Diff: 7000
注7000确实因为故意精度损失不等于6990。
为的currentTimeMillis()介绍说: -
返回以毫秒为单位的当前时间。请注意,尽管返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,可能会更大。例如,许多操作系统以几十毫秒为单位来测量时间。
返回: UTC的当前时间与午夜1970年1月1日之间的差值(以毫秒为单位)。
在你的情况下使用这个简单的技巧,你会得到所需的结果。
Long startTime= Long.parseLong("1497674732168");
Long endTime= Long.parseLong("1497574732168");
System.out.println("start time is"+new Date(startTime)+"end time is"+new Date(endTime));
**为什么**你关心的是位数**和**否,考虑任何时间+ - 500ms。 –
'System.currentTimeMillis()'返回自unix时期以来的毫秒数 - 'start'和'end'之间的差值将是这两点之间传递的毫秒数。你应该从'start'开始减去'end',然后你可以从那里格式化数值(如果你希望从那里开始的话)(尽管你很可能会用'0s'结尾) – MadProgrammer
你的意思就像'%1000'? –