A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x378320002 中级黑马   /  2013-6-12 12:54  /  1811 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 x378320002 于 2013-6-12 21:29 编辑

System类里有个currentTimeMillis()是获取当前时间毫秒数,自1970 年 1 月 1 日午夜算起,我们计算一个程序程序的执行时间时,就可以在开头和和结尾用此方法,然后取差。
我发现还有一个获取时间的方法nanoTime(),API上说返回最准确的可用系统计时器的
当前值,以毫微秒为单位,是不是计算程序时间用这个更好些呢?
API上解释的nanoTime()我始终没能看懂,这是原文:
此方法只能用于测量已过的时间,与系统或钟表时间的其他任何时间概念无关。返回值表示从某一固定但任意的时间算起的毫微秒数(或许从以后算起,所以该值可能为负)。此方法提供毫微秒的精度,但不是必要的毫微秒的准确度。它对于值的更改频率没有作出保证。在取值范围大于约 292 年(263 毫微秒)的连续调用的不同点在于:由于数字溢出,将无法准确计算已过的时间。
哪位给通俗的解释下啊。


评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

4 个回复

倒序浏览
坐等后来者
回复 使用道具 举报

JDK1.5之后java中的计时给出了更精确的方法:System.nanoTime(),输出的精度是纳秒级别,这个给一些性能测试提供了更准确的参考。

但是这个方法有个需要注意的地方,不能用来计算今天是哪一天。

看到这个方法不由得会想起System.currentTime(),这个方法,它的精度是毫秒,返回值是从1970.1.1的零点开始到当前时间的毫秒数,理论上这个可以用来算当前的时间,而且可以用这个值来构造一个Date对象。但是System.nanoTime()却是不同,代码注释上有这么一句: The value returned represents nanoseconds since some fixed but arbitrary time (perhaps in the future, so values may be negative).

这个返回值是一个从确定的值算起的,但是这个值是任意的,可能是一个未来的时间,所以返回值有可能是负数。

所以说这个System.nanoTime()方法只能用来计时,例如:

long startTime = System.nanoTime();

....

....

System.out.println(System.nanoTime() - startTime );

回复 使用道具 举报
api中文翻译的稀烂   看e文api,不懂得单词查一下词典,都比中文api好理解很多    个人认为楼上解释的很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马