您的位置:首页 > 编程语言 > Java开发

System.currentTimeMillis()笔记

2016-12-19 20:56 295 查看

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)


这是个人的学习笔记,哪里有不对的地方还请各位加以指正!=。=
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java