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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- Debian 7.x 安装Oracle JAVA
- springmvc实现url路由功能
- spring boot 配置 druid/** * 配置druid * Created by adam on 4/11/16. */ @Configuration public class D
- api接口rsa加密
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法