黑马程序员技术交流社区

标题: 获取系统时间~ [打印本页]

作者: x378320002    时间: 2013-6-12 12:54
标题: 获取系统时间~
本帖最后由 x378320002 于 2013-6-12 21:29 编辑

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



作者: Renica    时间: 2013-6-12 13:50
坐等后来者
作者: Heart    时间: 2013-6-12 14:13

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 );


作者: 刘勇强    时间: 2013-6-12 14:20
api中文翻译的稀烂   看e文api,不懂得单词查一下词典,都比中文api好理解很多    个人认为楼上解释的很好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2