System.currentTimeMillis()笔记

来源:互联网 发布:python tempfile模块 编辑:程序博客网 时间:2024/05/08 00:12

System.currentTimeMillis()

Java中System.currentTimeMillis() 返回的是从GMT 1970年1月1日00:00:00开始到现在的毫秒数(long型)。1970年是UNIX系统正式发布的时间,所以这一时间也称为UNIX时间戳(UNIX epoch)
按照参考书自己实践了一番:

public static void main(String[] args){        long totalMillisSeconds=System.currentTimeMillis();        long totalSeconds=totalMillisSeconds/1000;        int nowSeconds=(int)totalSeconds%60;        long totalMinutes=totalSeconds/60;        int nowMinutes=(int)totalMinutes%60;        long totalHours=totalMinutes/60;        int nowHours=(int)totalHours%24;        System.out.println("GMT Time is :  "+nowHours+":"+nowMinutes+":"+nowSeconds);    }

这里输出的时间总是跟当前时间系统对不上,输出的时间是“GMT Time is : 10:30:3”,而我系统的时间是18:30。最开始我还以为是自己的逻辑写错了?后来仔细查看并思考了一下,这里是输出的格林尼治0时区的时间,而我们是东8区,得加上8小时。

System.out.println(new Date(System.currentTimeMillis()));System.out.println(new Date());

这两条语句输出的结果是一样的,查看了代码之后发现:

    public Date() {        this(System.currentTimeMillis());     public Date(long date) {        fastTime = date;    }

无参构造方法调用有参构造方法,java不支持默认参数的方法,所以我等价看作:

   public Date(long date=System.currentTimeMillis()) {        fastTime = date;    }

在网上还找到一个获得更小时间戳的函数

System.nanoTime();

返回值(long型)表示从某一固定但任意的时间开始算起的毫微秒数,与当前系统时间无关,由于溢出并不能准确的计算出已过时间,但是如果当作生成随机数seed还是很不错的,因为精确但无法去测和计算。
用以下代码,在我的电脑环境下运行的时候出现了至少51次相同的数

    int count=1000;    for (int i=0;i<count;i++){         System.out.println(System.currentTimeMillis());    }

总的来说各有各的用处,又想用来计算时间的可以用currentTimeMillis,想要一个随机的不同的数可以用nanoTime,当然也有专门生成随机数的方法可以不用传入seed。

同时还找到了,Java实战项目里面介绍了一些不正确使用java.util.Random API的危害。这个教训告诉我们不要使用,会使随机数分布不均匀:

Math.abs(rnd.nextInt())%n

而使用:

rnd.nextInt(n)

这是个人的学习笔记,哪里有不对的地方还请各位加以指正!=。=

0 0
原创粉丝点击